删除链表的倒数第n个节点

问题描述

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

解题思路

  可以将倒数问题,变出顺数问题来求解。先计算链表长度length,再转化为删除链表顺数第 length - n + 1 个元素

  O(n)复杂度解法:使用一次遍历即可成功

  我们可以先找到第 n 个节点 curNode,再设置一个 preNode 节点为被删除节点的前一个节点;

  从第 n 个节点开始,curNodepreNode 一起向后移动,直到 preNode 成为被删除节点的前一节点 。

 1 class Solution {
 2     public ListNode removeNthFromEnd(ListNode head, int n) {
 3         ListNode dummy = new ListNode(-1);
 4         dummy.next = head;
 5         ListNode curNode = dummy;
 6         ListNode preNode = dummy;
 7         int count = 0;
 8         while(count < n) {
 9             curNode = curNode.next;
10             count ++;
11         }
12 
13         while (curNode.next!=null) {
14             preNode = preNode.next;
15             curNode = curNode.next;
16         }
17 
18         preNode.next = preNode.next.next;
19         return dummy.next;
20     }
21 }

 

 
posted @ 2019-05-30 23:19  LimLee  阅读(390)  评论(0编辑  收藏  举报