Given a linked list, remove the n th node from the end of list and return its head.
Note:
Given n will always be valid.
Java代码和实现思路
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
//(1)遍历链表,指针走到尾,获取链表长度len
//(2)cur指针走到需要删除的结点的len-n位置,同时需要保存前结点pre
//(3)执行pre.next = cur.next移除当前结点cur(跳过当前结点,pre指向当前结点的下一结点)
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null)
return head;
ListNode node = head;
int len = 0;
while(node != null){
node = node.next;
len ++;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode cur = head, pre = dummy;
for(int i = 1; i <= len - n; i++){
pre = cur;
cur = cur.next;
}
pre.next = cur.next;
return dummy.next;
}
}