無頭單鏈表中刪除非尾節點及插入節點(不能遍歷鍊錶)

2021-09-10 19:21:26 字數 668 閱讀 2668

首先給出鍊錶節點的定義: 

#include #include #include typedef int datatype;

typedef struct slistnode

slistnode;

思路:本題要求不能遍歷鍊錶,那麼在知道所刪節點資訊後,我們能夠知道的只有該節點及該節點後面的節點資訊,所以我們只能利用該節點後面的結點來達到刪除該節點的目的。我們可以定義乙個指標指向要刪除節點的下乙個節點,並將要刪除結點的data和pnext都更新為下乙個結點的data和pnext值,然後釋放所定義的指標。簡言之就是用所要刪除節點的下乙個結點來替換該節點,並刪除該節點的下乙個節點。

// 刪除無頭鍊錶的非尾結點(替換刪除)

void removenodenottail(slistnode *pos)

思路: 同樣,在只知道要插入節點的位置及要插入的資料時,我們能利用地也只有該節點後面的節點。首先也是將要插入節點位置的節點資訊複製乙份,並儲存在乙個新節點中,然後將要插入節點位置的節點資訊分別更新為data和前面所求的新節點。

//無頭鍊錶前插入(替換插入) 

void insertnohead(slistnode *pos, int data)

單鏈表 無頭節點

就這書上 敲了一邊,加深印象,沒有頭結點的時候插入第乙個就有所不同了,而刪除時要找到前乙個,注意current link null 就這樣。include include include using namespace std struct linknode class list bool list...

單鏈表操作 無頭節點

ifndef singlelist h define singlelist h 這是沒有頭結點的版本檔案 有頭結點的版本更簡單些,操作統一 include include include include typedef int elemtype typedef struct nodenode,lin...

從無頭單鏈表中刪除節點

題目 在乙個給定的單向鍊錶中,如何遍歷一次刪除特定的節點 解法 這是乙個典型的逆向思維問題,正常的刪除需要把當前節點的前面節點和後面節點鏈結起來,再刪除當前節點,完成任務。當前節點的後續節點比較容易得到,但困難的是無法得到當前節點的前面節點,逆向思維的結果是不刪除當前節點,而是將後面節點的資料拷貝到...