题目:
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass
已知:题目还给出了节点的结构,在下面显示。
分析:只需要设置两个指针(Java中没有指针,暂且形象地这么叫),一个left,一个right,使得left和right相距正好为n,那么,只要当right移动到链表末尾的时候,left正好在倒数第n个位置(其实应该移动到倒数第n+1个位置,因为涉及到.next.next的操作),这样就可以使用left.next=left.next.next这个常用的节点删除操作了。
Java解题:
题目已给出的Node结构:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
解题:
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode left = head;
ListNode right = head;
while(n>0){
if(right.next==null)
return head.next;
right=right.next;
n--;
}
while(right.next!=null){
right=right.next;
left=left.next;
}
left.next=left.next.next;
return head;
}