码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-11-21 00:17:09      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:元素   扫描   一个   .com   rom   实现   inf   链表   示例   


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

示例:

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

标签:元素   扫描   一个   .com   rom   实现   inf   链表   示例   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!