思路
使用两个节点,一个指向头节点,一个指向新节点,新节点指向头节点。俩节点不断拉开距离直到为n,然后一起前进,直到终点。此时后方的节点正好指向要被删除的节点的前面。删除时单独处理一下头节点即可。
代码
class Solution {fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {var distance = 1var firstNode = headvar secondNode = ListNode(0)secondNode.next = headwhile (firstNode?.next != null) {if (distance < n) {firstNode = firstNode.nextdistance++}else {firstNode = firstNode.nextsecondNode = secondNode.next!!}}return if (secondNode.next == head) {head?.next}else {secondNode?.next = secondNode?.next?.nexthead}}}
