
Given a linked list, remove the nth node from the end of list and return its head.
For example,
1 2 3
|
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.
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
* Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode first = head, second = head, pre = null; while((--n)>0&&first.next!=null){ first = first.next; } while(first.next!=null) { first = first.next; pre = second; second = second.next; } if(second.next==null&&pre==null) { head = null; } else if(second.next==null) { pre.next = null; } else if(pre == null) { head = head.next; } else { pre.next = second.next; } return head; } }
|
近期评论