19. 删除链表的倒数第N个节点

Posted smallgrass

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19. 删除链表的倒数第N个节点相关的知识,希望对你有一定的参考价值。


给定一个链表,删除链表的倒数第 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

思路:

定义三个指针,

p扫描整个链表,定位到最后一个元素

q定位  倒数第n个元素

node  第n-1个元素

 

技术分享图片

如上图,删除q结点使用   node.next = q.next

技术分享图片

假设n == 5,那q = head     node = null

删除q结点用    head = head.next

 

最后返回head

代码:

 1 public ListNode removeNthFromEnd(ListNode head, int n) {
 2         ListNode p = head;//后指针
 3         ListNode q = head;//前指针
 4         ListNode node = null;
 5         int target = 1;
 6         while(target < n ) {
 7             p = p.next;
 8             target++;
 9         }
10         while(p!= null && p.next!=null) {
11             p = p.next;
12             node = q;
13             q = q.next;
14         }
15         if(node != null) {
16             node.next = q.next;
17         }
18         else {
19             head = head.next;
20         }
21         return head;
22     }

 

 实现一次扫描

 


以上是关于19. 删除链表的倒数第N个节点的主要内容,如果未能解决你的问题,请参考以下文章

19. 删除链表的倒数第N个节点

19. 删除链表的倒数第N个节点

Lc19_删除链表的倒数第N个节点

LeetCode 19删除链表的倒数第N个节点

Leetcode 19 删除链表的倒数第 N 个节点

代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表的倒数第N个节点160.相交链表142.环形链表II