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

19. Remove Nth Node From End of List

2017-09-17 00:00 302 查看
有两种做法,一种是先便利获得size,然后再remove

另一种做法通过快慢指针,之间相差n的gap,之后再进行remove

// normal way to solve
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null){
return head;
}

ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode cur = dummy;

int length = 0;

while(cur.next != null){
length++;
cur = cur.next;
}

length = length - n;
cur = dummy;

while(length > 0){
length--;
cur = cur.next;
}

cur.next = cur.next.next;

return dummy.next;
}
}

//Two pointer way

public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode first = dummy;
ListNode second = dummy;
// Advances first pointer so that the gap between first and second is n nodes apart
for (int i = 1; i <= n + 1; i++) {
first = first.next;
}
// Move first to the end, maintaining the gap
while (first != null) {
first = first.next;
second = second.next;
}
second.next = second.next.next;
return dummy.next;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: