您的位置:首页 > Web前端 > Node.js

LeetCode-Remove Nth Node From End of List

2015-03-09 01:22 316 查看
两个pointer,这种无法知道linkedlist size的,(给的是自己定义的 list node) 却要从后往前数的,就需要两个指针,在开始就让他们以前以后相差n,然后一同向后,当前面那个fast的到达末尾的时候,slow正好就到了倒数第n个的前一个。

public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if ( head == null)
return head;
ListNode first = head;
ListNode second = head;
for ( int i = 0; i < n; i ++ ){
first = first.next;
}
if ( first == null ){
head = head.next;
return head;
}
while ( first.next != null ){
first = first.next;
second= second.next;
}
second.next = second.next.next;
return head;
}
}

注意一下开始的pointer位置的话就可以稍微简化一点:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: