题目:
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
本题的解法是基于双指针的,保持两个指针的距离为n,比较快的指针到达末尾了,那么比较慢的指针所指向的就是要删除的点。当然距离最好为n+1,这样比较慢的指针指向的为前趋,比较容易操作删除。代码如下:
public ListNode removeNthFromEnd(ListNode head, int n) {
if (n <= 0) {
return head;
}
ListNode pre = head;
ListNode cur = head;
int i = 0;
while (i <= n && cur != null) {
cur = cur.next;
i++;
}
if (i <= n) {
return pre.next;
}
while (cur != null) {
pre = pre.next;
cur = cur.next;
}
pre.next = pre.next.next;
return head;
}
单遍历删除链表倒数第N个节点

本文介绍了一种仅需遍历一次链表即可删除倒数第N个节点的方法。通过使用双指针技巧,较快的指针先前进N+1步,当快指针到达链表尾部时,慢指针正好位于目标节点的前一个位置。
192

被折叠的 条评论
为什么被折叠?



