1. 程式人生 > 其它 >[牛客題霸-研發] NC53-刪除連結串列的倒數第n個節點

[牛客題霸-研發] NC53-刪除連結串列的倒數第n個節點

技術標籤:牛客題霸-研發演算法連結串列指標

[牛客題霸-研發] NC53-刪除連結串列的倒數第n個節點

----------------------------------------------本題連結----------------------------------------------

題目描述

給定一個連結串列,刪除連結串列的倒數第n個節點並返回連結串列的頭指標
例如:
給出的連結串列為:1->2->3->4->5, n= 2.
刪除了連結串列的倒數第n個節點之後,連結串列變為1->2->3->5.

備註:
題目保證n一定是有效的
請給出請給出時間複雜度為\ O(n) O(n)的演算法

示例

輸入
{1,2},2

返回值
{2}

思路

連結串列問題,快慢指標操作
快指標先走,讓快慢指標之間相隔n個節點
當快指標到達連結串列末尾,慢指標的下一個節點即為需要刪除的節點
需要注意的是,刪除節點為頭結點的情況

演算法過程

  1. 判斷異常情況
  2. 初始化快慢指標和虛擬頭指標
  3. 快指標先走n個節點
  4. 快慢指標一起走到末尾
  5. 刪除節點
  6. 輸出虛擬頭結點的下一個節點

解答

public class Solution {
    /**
     * 
     * @param head ListNode類 
     * @param n int整型 
     * @return ListNode類
     */
public ListNode removeNthFromEnd (ListNode head, int n) { if(head == null || n == 0) return head; ListNode dummy = new ListNode(-1), slow = dummy, fast = dummy; dummy.next = head; for(int i = 0; i < n; i++){ fast = fast.next; } while(
fast.next != null){ slow = slow.next; fast = fast.next; } slow.next = slow.next.next; return dummy.next; } }