19. Remove Nth Node From End of List
阿新 • • 發佈:2021-11-02
LeetCode、連結串列
SLinkedList<int> slist = new SLinkedList<int>();
slist.Append(1);
slist.Append(2);
slist.Append(3);
slist.Append(4);
slist.Append(5);
Console.WriteLine(slist.Head.Print());
Console.WriteLine("n = 2");
slist.RemoveNthFromEnd(2);
Console.WriteLine(slist.Head.Print());
/// <summary> /// 刪除連結串列中倒數第 n 個結點 /// </summary> /// <param name="n">連結串列中倒數第 n 個結點</param> /// <returns></returns> public void RemoveNthFromEnd(int n) { if (n > Count) { return; } // 設定快慢指標,間隔n個距離。同時移動,快指標到鏈尾時,慢指標即指向第n個結點 var fast = Head; var slow = Head; for (int i = 0; i < n; i++) { fast = fast.Next; } // 若刪除的是頭結點 if (fast == null) { Head = Head.Next; return; } while (fast.Next != null) { fast = fast.Next; slow = slow.Next; } slow.Next = slow.Next.Next; }