1. 程式人生 > >刪除一個無頭單鏈表的非尾結點(不能遍歷連結串列)

刪除一個無頭單鏈表的非尾結點(不能遍歷連結串列)

思路

  • 之前刪除連結串列中某個位置的結點必須找到該節點的prev結點,並且需要遍歷,而此題不能遍歷,則之前的方法行不通。那麼就想到了另一種方法——替換法
替換法
  • 既然要刪除該結點,那麼我們可以將該結點的next結點的值賦給該結點,再刪除這個next結點,這樣就相當於刪除了該結點。

程式碼

void EraseNotTailNode(pNode pos)
{
    pNode pDel = NULL;
    if (pos == NULL && pos->next == NULL)//排除空和尾結點的情況
    {
        return
; } pDel = pos->next; pos->data = pDel->data;//傳值 pos->next = pDel->next; free(pDel); pDel = NULL; }

圖展示

這裡寫圖片描述