單鏈表不可能完全實現
傳統解法一:將待刪節點後續節點Copy至待刪節點,刪除後續節點。
存在問題:當指定節點爲鏈表最後一個節點時,無法刪除。
傳統解法二:將待刪節點的內存指向NULL。
存在問題:NULL在系統上是一個特定的區域,如果想讓待刪節點的先續節點指向NULL,必須找到該節點,否則等同於改變了待刪節點的值而刪除了待刪節點的後續節點。
雙向鏈表實現
linker_p delete_Node(linker_p Head,int pos)
{
int i = 1;
linker_p Np_now = Head;
linker_p p;
if(Head->prev == NULL && Head->next == NULL)
{
printf("Delete No.%d data is %d success\n",i,Head->data);
free(Np_now);
Head->prev = NULL;
Head->next = NULL;
return Head;
}
while(Np_now != NULL)
{
if(i == pos-1)
{
p = Np_now->next;
Np_now->next = Np_now->next->next;
Np_now->next->prev = Np_now;
printf("Delete No.%d data is %d success\n",i+1,p->data);
free(p);
return Head;
}
else
{
Np_now = Np_now->next;
i++;
}
}
printf("Delete error : Cannot find this position %d \n\n",pos);
return Head;
}