連結串列的插入與刪除
阿新 • • 發佈:2021-01-24
技術標籤:資料結構
在連結串列中,尤其是自己寫連結串列的時候,插入或者刪除常常會遇到各種問題。
例如:插入的時候第一個插到了第二個,插入最後一個的時候會出錯。
又或者在刪除的時候也有了類似的問題。
我也同樣如此,歸根到底,不過是演算法方面的問題,在我讀《資料結構》(C語言版)(嚴蔚敏)的時候,發現其中演算法非常妙,無論如何都不會出錯。
PS:該連結串列是帶頭結點的連結串列(C++)
連結串列的插入程式碼:
int LinkList::Insert_pos(int pos, int val) //按位置插入
{
Node* p = head;
int j = 0;
while (p && j < pos - 1)//尋找第pos-1個結點
{
p = p->next;
++j;
}
if (!p || j > pos - 1)//pos小於1或者大於表長+1
{
return 0;
}
Node* temp = new Node;//生成新結點
temp->data = val; //插入L中
temp->next = p->next;
p->next = temp;
return 1;
}
連結串列的刪除程式碼:
int LinkList::Delete_pos(int pos)//按位置刪除
{
Node* p = head;
int j = 0;
while (p->next && j < pos - 1)
{//尋找到第pos個結點,並另p指向他的前趨
p = p->next;
++j;
}
if (!p->next || j > pos - 1)//刪除位置不合理
{
return 0;
}
Node* pDel = p->next;//刪除並釋放
p->next = pDel->next;
delete pDel;
return 1;
}