向鏈表末尾添加數據,分首次添加(建立頭尾節點)與非首次添加(維護尾指針)兩種情況:
/// 尾部添加數據
public void Append(int DataValue)
{
var newNode = new ListNode(DataValue);
if (IsNull())
{
Head = newNode;
Tail = newNode;
}
else
{
Tail.Next = newNode;
newNode.Previous = Tail;
Tail = newNode;
}
Current = newNode;
ListCountValue++;
}
需處理三種位置:頭節點、尾節點、中間節點,並正確更新頭尾指針與鄰居節點的雙向引用:
/// 刪除當前數據
public void Delete()
{
if (IsNull()) return;
if (IsBOF()) // 刪除頭節點
{
Head = Current.Next;
Current = Head;
ListCountValue--;
return;
}
if (IsEOF()) // 刪除尾節點
{
Tail = Current.Previous;
Current = Tail;
ListCountValue--;
return;
}
// 刪除中間節點
Current.Previous.Next = Current.Next;
Current.Next.Previous = Current.Previous; // 原文缺失此行,補全雙向維護
Current = Current.Previous;
ListCountValue--;
}
Previous.Next,遺漏Next.Previous,會導致反向鏈斷裂。已在上方補全。Current指針策略:刪除後指向前驅節點(頭/尾刪除則指向新頭/尾),便於連續操作。null,或使用Debug.Assert。這兩個方法是鏈表動態修改的基石,配合Insert可構建完整增刪改查能力。