remove nth node from end of list

1
2
3
4
5
6
单链表定义
public class ListNode{
int val;
ListNode next;
ListNode(int x){val = x;}
}

创建一个工作节点,好处是链表为单节点时的情况也能包括进去,第二点好处是不需要动题设给的指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Solution{
public ListNode removeNthNodeFromEnd(ListNode head , int n){
ListNode start = new ListNode(0);
start.next = head;
ListNode fast = start;
ListNode slow = start;
for(int i = 0 ; i <= n ; i++){ //让fast和slow两指针之间gap为n
fast = fast.next;
}
while(fast.next != null){ //fast和slow指针同速前进,直到最后指向null
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next; //删除一个节点
return start.next;
}
}