首页 > 其他 > 详细

19.9.24 删除链表的倒数第N个结点 中等 (需改进)

时间:2019-09-24 10:20:10      阅读:72      评论:0      收藏:0      [点我收藏+]

技术分享图片


 

题目:

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

 

示例:

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

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

 

说明:

给定的 n 保证是有效的。

 

代码:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 class Solution {
10     public ListNode removeNthFromEnd(ListNode head, int n) {
11         ListNode curr1 = new ListNode(0);
12         ListNode curr2 = new ListNode(0);
13         ListNode p = new ListNode(0);
14         curr1 = p = curr2 = head;
15         int num = 0;
16         
17         while(curr1 != null){
18             num++;
19             curr1 = curr1.next;
20         }
21         if(num == n){
22             head = head.next;
23             return head;
24         }
25         
26         else{
27             for(int i = 0; i < num - n; i++){
28                 if(curr2 != null){
29                     curr2 = curr2.next;
30                 }
31                 if(i == num - n - 2){
32                     p = curr2;
33                 }
34             }
35         }
36         p.next = curr2.next;
37         ListNode result = new ListNode(0);
38         result.next = head;
39         return result.next;
40     } 
41 }

 

心得:

1、这道题的思路还是比较简单的,倒序,那就用两趟遍历,第一趟算出链表长度,第二趟标明要删除的数据元素,最后进行删除输出结果;

2、题目说明要返回头结点,那么就是要新建一个有头结点的链表来返回了;

3、这次做题目的时候回忆起了对象的复制是直接引用的

1 curr1 = p = curr2 = head;

像这一句话,修改curr1、p和curr2都会直接修改head;

4、也发现了上面几个对象用next遍历后就回不来了,必须再新创建一个链表来输出结果。

 

 

技术分享图片

 

19.9.24 删除链表的倒数第N个结点 中等 (需改进)

原文:https://www.cnblogs.com/wasi-991017/p/11576538.html

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