標籤:leetcode java remove nth node from
題目:
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個的節點,返回去除節點後的頭結點。
例如:
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.
注意:
給定的n都是有效。
試著一次遍曆就得出結果。
演算法分析:
Use fast and slow pointers. The fast pointer is n steps ahead of the slow pointer. When the fast reaches the end, the slow pointer points at the previous element of the target element.
利用快慢雙指標。快指標在慢指標之前n步。當快指標到達鏈表的結尾時,慢指標正好指向了目標元素的頭一個元素。
AC代碼:
public class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head == null) return null; ListNode fast = head; ListNode slow = head; for(int i=0; i<n; i++) { fast = fast.next; } //if remove the first node if(fast == null) { head = head.next; return head; } while(fast.next != null) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return head; }}
著作權聲明:本文為博主原創文章,轉載註明出處
[LeetCode][Java] Remove Nth Node From End of List