leetcode 19 Remove Nth Node From End of List

題目詳情

Given a linked list, remove the nth node from the end of list and return its head.

題目要求輸入一個linked list 和一個數字n。要求咱們返回刪掉了倒數第n個節點的鏈表。node

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.指針

想法

  • 求倒數第n個節點,咱們將這個問題轉化一下。
  • 咱們聲明兩個指針low和fast,讓fast和low指向的節點距離差保持爲n。
  • 這樣當fast指向了鏈表中的最後一個節點時,low指針指向的節點就是咱們所求的倒數第n個節點了。

解法

public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode start = new ListNode(0);
        
        ListNode slow = start , fast = start;
        slow.next = head;
        
        //使fast點和slow點的差距爲n
        for(int i=1;i<=n+1;i++){
            fast = fast.next;
        }
        
        //同時移動fast和slow 使得fast到達listnode的末尾
        while(fast != null){
            slow = slow.next;
            fast = fast.next;
        }
        
        //刪除倒數第n個節點
        slow.next = slow.next.next;      
        
        return start.next;
    }
相關文章
相關標籤/搜索