LeetCode 19. Remove Nth Node From End of List
原题链接
中等
作者:
Ccc1Z
,
2020-07-15 17:02:04
,
所有人可见
,
阅读 509
思路
- 链表题目最重要的就是先把图画出来(因为有些题指针确实有点多)
- 要删倒数第k个节点就要找到倒数第k+1个节点
- 双指针:(slow 和 fast)
- 我们让slow和fast的距离始终保持k,那么当fast到达终点的时候slow刚好就在倒数第k+1个节点上
- 同时因为可能删除头节点,我们引入dummy节点来避免边界问题
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null)
return null;
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode slow = dummy;
ListNode fast = dummy;
while(n-->0)
fast = fast.next;
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummy.next;
}
}