思路
思路就是找到倒数第n个节点的前一个接点,让其指向其下下个节点即可。
用双指针,一个执行头结点,一个执行第n个节点,让两个节点一起移动,当快节点到达末尾时,慢节点指向的位置就是倒数第n个节点的位置,为了找到倒数第n+1个位置,就让慢节点从虚节点开始遍历。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null || head.next == null){
return null;
}
ListNode dummyNode = new ListNode(-1,head);
ListNode slow = dummyNode;
ListNode fast = head;
for(int i = 0;i<n;i++){
fast = fast.next;
}
while(fast != null){
slow = slow.next;
fast = fast.next;
}
slow.next = slow.next.next;
return dummyNode.next;
}
}
|