首页 > 其他 > 详细

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

时间:2018-11-20 23:53:25      阅读:313      评论:0      收藏:0      [点我收藏+]


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

示例:

给定一个链表: 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个节点

原文:https://www.cnblogs.com/smallgrass/p/9992522.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!