1. 程式人生 > 其它 >19. Remove Nth Node From End of List

19. Remove Nth Node From End of List

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;
}