刪除鍊錶之two star programming

2022-08-21 10:12:10 字數 1173 閱讀 4943

最近偶爾看到一篇關於linus torvalds的訪問,大神說大部分人都不理解指標。假設被要求寫一段鍊錶刪除節點的程式,大多數的做法都是跟蹤兩個指標,當前指標cur和其父節點pre,這種實現很容易理解,但是並沒有用到指標的精髓。

linus是怎麼寫的呢,且看源**

//鍊錶之two star programming

#include typedef struct node

listnode;

listnode *insert(listnode *head, int value)

void erase(listnode **head_in, int value)

else

}//return head;

}void printlist(listnode *head)

printf("\n");

}int main()

} else if(select == 2)

}else if(select == 3)

else break;

} while (1);

getchar();

return 0;

}

執行結果

在鍊錶的刪除節點函式earse()中,並不是把頭結點指標head作為引數傳入,而是傳入指標head的引用,小雨來分析一下執行過程,直接上圖說明

可以看出cur的移動比較有意思,它是沿著節點之間的指標移動的,在這裡,我們也可以把指標當成一種特殊的節點。

當然現在並不提倡這種程式設計風格,雖然看起來很簡潔,但是太晦澀,不能讓人一眼看懂,linus說一般作業系統核心部分用這種方式。

刷leetcode之刪除鍊錶節點

請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。現有乙個鍊錶 head 4,5,1,9 它可以表示為 示例 1 輸入 head 4,5,1,9 node 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 ...

鍊錶 刪除鍊錶的節點

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。問題分析 對於鍊錶的刪除,按照劍指offer的一貫思路就是展開討論 1 空鍊錶咋辦 待刪除的節點是空節點咋辦 2 要刪除的節點在鍊錶中的位置有三種情況 1 鍊錶只有乙個節點,待刪除節點是表頭又是尾節點 2 鍊錶有多個節點,待刪除的節點是...

鍊錶插入刪除

include include typedef struct node node,linklist void createlist linklist head 建立鍊錶 s node malloc sizeof node s next null s data data p next s p s in...