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;
}
}
}