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.
题目意思是给你一个链表,让你去除倒数第n个节点。
需要注意的是:
1.Try to do this in one pass.
2.使用双指针。
即让current先跑n个节点,然后再让next和current一起跑,当current后面没有节点了,则代表next的当前节点是需要删除的节点。
package leetcode;
public class RemoveNthNodeFromEndofList {
public ListNode removeNthFromEnd(ListNode head, int n) {
int size = 0;
ListNode current = head;
ListNode next = head;
if (head == null) return null;
for (int i = 0; i<n; i++){
//System.out.println(current.val);
current = current.next;
}
if(current == null)
{
head = head.next;
next = null;
return head;
}
while (current.next != null){
//System.out.println(current.val + " " + next.val);
current = current.next;
next = next.next;
}
//System.out.println(current.val + " " + next.val);
ListNode tmp = next.next.next;
next.next = tmp;
return head;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode head = new ListNode(1);
ListNode n1 = new ListNode(2);
ListNode n2 = new ListNode(3);
ListNode n3 = new ListNode(4);
ListNode end = new ListNode(5);
head.next = n1;
n1.next = n2;
n2.next = n3;
n3.next = end;
head = new RemoveNthNodeFromEndofList().removeNthFromEnd(head, 1);
while (head != null){
System.out.print(head.val + " ");
head = head.next;
}
}
}