博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 19 删除链表的倒数第n个节点
阅读量:4579 次
发布时间:2019-06-09

本文共 1236 字,大约阅读时间需要 4 分钟。

问题描述

* leetcode 19. 删除链表的倒数第n个节点(倒数第1个节点表示顺数最后一个节点)

解题思路

* 可以将倒数问题,变出顺数问题来求解。先计算链表长度length,再转化为删除链表顺数第 length - n + 1 个元素 * 高级解法:使用一次遍历即可成功:
* 我们可以先找到第n个节点curNode,再设置一个preNode节点为被删除节点的前一个节点
* 从第n个节点开始,curNode和preNode一起向后移动,直到preNode成为被删除节点的前一节点
* 截止5.30。耗时短于100%的提交答案。
 

唯一要求

* 注意被删除节点为头节点和头节点的next节点的情况。
1 public ListNode removeNthFromEnd2(ListNode head, int n) { 2         ListNode curNode = head; 3         ListNode preNode = head; 4         int count = 1; 5         while(count <= n) { 6             curNode = curNode.next; 7             count ++; 8         } 9         // 删除顺数第一个:10         if (curNode==null) {11             head = head.next;12             return head;13         }14         // 删除顺数第二个15         if(curNode.next==null && curNode != null) {16             head.next = head.next.next;17             return head;18         }19         while (curNode.next!=null) {20             preNode = preNode.next;21             curNode = curNode.next;22 23         }24         if(preNode.next!= null && preNode.next.next!=null) {25             preNode.next = preNode.next.next;26         } else {27             preNode.next = null;28         }29         return head;30     }

 

 

转载于:https://www.cnblogs.com/dogeLife/p/10952688.html

你可能感兴趣的文章