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

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

时间:2020-07-02 22:03:18      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:return   头结点   while   class   cond   删除节点   遍历   授权   pre   

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

示例:

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

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

说明:

给定的 n 保证是有效的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

法一:

 1 public ListNode removeNthFromEnd(ListNode head, int n) {
 2 
 3         ListNode dumy = new ListNode(0);
 4         dumy.next = head;
 5         ListNode node = dumy;
 6         int num = 1;
 7         //计算出一共有多少个节点(链表数+1)
 8         while (node.next != null) {
 9             node = node.next;
10             num++;
11         }
12         ListNode node2 = dumy;
13         int k = num - n - 1;
14         for (int i = 0; i < k; i++) {
15             node2 = node2.next;
16         }
17         node2.next = node2.next.next;//找到删除节点的前一个节点
18         return dumy.next;
19 
20     }

一次计算节点个数,一次查找删除节点

 

法二:

 1 //    双节点法,一次遍历,相隔n个节点,同时向后移动,前节点到尾,后节点正好为删除节点的前一个节点,删除操作。
 2 
 3     public ListNode removeNthFromEnd2(ListNode head, int n) {
 4         stNode dummy = new ListNode(0);
 5         dummy.next = head;
 6         ListNode first = dummy;
 7         ListNode second = dummy;
 8 
 9         for (int i = 1; i <= n ; i++) {
10             first = first.next;
11         }
12 
13         while (first.next != null) {
14             first = first.next;
15             second = second.next;
16         }
17         second.next = second.next.next;
18         return dummy.next;
19     }

 

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

标签:return   头结点   while   class   cond   删除节点   遍历   授权   pre   

原文地址:https://www.cnblogs.com/boboboo610/p/13226722.html

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