题目要求是,给你一个单向链表,和一个数字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 }