19. Remove Nth Node From End of List
https://leetcode.com/problemset/all/?search=19
涉及链表删除操作的时候,稳妥起见都用 dummy
node,省去很多麻烦。因为不一定什么时候 head 就
被删了。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null) {
return head;
}
int len = 0;
ListNode dummy = new ListNode(0);
dummy.next = head;
while (head != null) {
len++;
head = head.next;
}
head = dummy;
int index = len - n;
while (index > 0) {
head = head.next;
index--;
}
head.next = head.next.next;
return dummy.next;
}
}
快慢指针
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode start = new ListNode(0);
ListNode slow = start, fast = start;
slow.next = head;
//Move fast in front so that the gap between slow and fast becomes n
for(int i=1; i<=n+1; i++) {
fast = fast.next;
}
//Move fast to the end, maintaining the gap
while(fast != null) {
slow = slow.next;
fast = fast.next;
}
//Skip the desired node
slow.next = slow.next.next;
return start.next;
}

浙公网安备 33010602011771号