給定連結串列中間節點指標,刪除中間節點的方法

NO IMAGE

問題如下
輸入:連結串列 a->b->c->d->e中指向節點c的指標
輸出:無返回值,但新連結串列變為a->b->d->e
解答:
想了好久沒想出來,看了提示才知道解法的。這裡用到了一個小技巧。要刪除中間節點,但是我們不知道要刪除節點的上一個節點p,所以無法通過修改指標的方法(p->next=del->next)來刪除節點,但知道要刪除節點的後一個節點,那麼我們換一個思路,把要刪除的節點的資料與該節點的後一個節點的資料交換,然後刪除後一個節點,從而達到目的。但是該方法不能刪除最後一個節點,原因顯而易見。
複製程式碼 程式碼如下:
// a tricky solution,can’t delete the last one element
int delete_node(NODE* node) {
  int data;
  NODE *p=node->next;
   node->data=p->data;
   node->next=p->next;
  free(p);
}

您可能感興趣的文章:

Linux核心連結串列實現過程編碼實現從無序連結串列中移除重複項(C和JAVA例項)用C和JAVA分別建立連結串列的例項java單向連結串列的實現例項C 中單連結串列的建立與基本操作STL list連結串列的用法詳細解析