
给出一个单向链表,删除从结尾开始的第N个节点。
思路:
因为是单向链表,所以不能从尾到头数第N个元素。
指针只能从左向右走。
可以用两个指针,它们之间间隔N个节点,两个指针一起向右走,
直到右边的指针走到尽头,那左边的指针指向的就是从结尾开始的第N个节点。
注意左边的指针要是第N个节点的前一个节点,这样才能通过next指针作删除操作。
为了避免head节点本身也被删掉,定义一个newHead, newHead.next = head,
不管怎么操作,newHead都不会受到影响,
那么最后返回newHead.next即可。
定义左边指针为pre (指向从结尾开始第N个节点的前一个节点),
右边指针就拿head来充数(节省内存)。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode newHead = new ListNode();
newHead.next = head;
ListNode pre = newHead;
for(int i = 1; i < n; i++) {
head = head.next;
}
while(head.next != null) {
pre = pre.next;
head = head.next;
}
head = pre.next;
pre.next = head.next;
head.next = null;
return newHead.next;
}
本文介绍了一种使用双指针技术在单向链表中删除倒数第N个节点的方法。通过两个相隔N个节点距离的指针同步移动,当右指针到达链表末尾时,左指针正好位于目标节点的前一个位置。
853

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



