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 //head作为第一个节点,有可能被删除,所以声明一个pre 12 ListNode pre = new ListNode(0); 13 //pre作为head的前一个节点 14 pre.next = head; 15 ListNode start = pre,end = pre; 16 //让start移动n个位置,使得end和start一直保持n个距离 17 while(n != 0){ 18 start = start.next; 19 n--; 20 } 21 //当start在最后一个节点时,end也就移动到了需要删除的那个节点前面了。此时end.next就是要删除的节点。 22 while(start.next != null){ 23 start = start.next; 24 end = end.next; 25 } 26 end.next = end.next.next; 27 //返回pre.next,指向整个链表。 28 return pre.next; 29 } 30 }
原文:https://www.cnblogs.com/qthth/p/13556377.html