首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C#單向鏈表核心操作(五):節點插入與有序插入實現

     編輯:關於C語言

指定位置前插入節點

在當前節點之前插入新節點,需處理三種情況:空表、頭部插入、中間插入。雙向鏈表結構下需維護Previous與Next雙向指針。

/// 在當前位置前插入數據
public void Insert(int DataValue)
{
    var newNode = new ListNode(DataValue);
    if (IsNull())
    {
        Append(DataValue);
        return;
    }
    
    if (IsBOF()) // 頭部插入
    {
        newNode.Next = Head;
        Head.Previous = newNode;
        Head = newNode;
        Current = Head;
        ListCountValue++;
        return;
    }
    
    // 中間插入
    newNode.Next = Current;
    newNode.Previous = Current.Previous;
    Current.Previous.Next = newNode;
    Current.Previous = newNode;
    Current = newNode;
    ListCountValue++;
}

升序插入實現

維持鏈表非遞減有序:

/// 升序插入
public void InsertAscending(int InsertValue)
{
    if (IsNull()) { Append(InsertValue); return; }
    
    MoveFirst();
    if (InsertValue < GetCurrentValue()) { Insert(InsertValue); return; }
    
    while (true)
    {
        if (InsertValue < GetCurrentValue()) { Insert(InsertValue); break; }
        if (IsEOF()) { Append(InsertValue); break; }
        MoveNext();
    }
}

關鍵點總結

  • 雙向指針維護是插入操作的核心難點,順序錯誤會導致鏈表斷裂。
  • Current指針在插入後指向新節點,便於連續操作。
  • 有序插入本質是查找插入位置 + 標準插入的組合。
  • 實際項目中建議將比較邏輯抽象為IComparer<T>支援泛型類型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved