LeetCode(19) - Remove Nth Node From End of List

  题目要求是,给你一个单向链表,和一个数字n,删除该链表倒数第n个node,其中测试案例中n能保证一定有效。

  思路很简单,用两个指针,它们两个相隔为n,当后面的指针指向链表尾的时候,前面的指针指向的node的下一个node,就是要删除的那一个。

  代码如下:

 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 public class Solution {
10     public ListNode removeNthFromEnd(ListNode head, int n) {
11         //当可能需要处理head的时候,用dumpNode来指向head,处理起来会方便很多。
12         ListNode dumpNode = new ListNode(0);
13         dumpNode.next = head;
14         ListNode prev = dumpNode;
15         ListNode curr = prev;
16         //让prev和curr的距离为n
17         while (n-- > 0) {
18             curr = curr.next;
19         }
20         //让curr走到链表尾部,prev随着curr一起走,
21         while (curr.next != null) {
22             prev = prev.next;
23             curr = curr.next;
24         }
25         //删除prev的下一个链表。
26         prev.next = prev.next.next;
27         //返回head。
28         return dumpNode.next;
29     }
30 }
原文地址:https://www.cnblogs.com/kepuCS/p/5271698.html