從無頭單鏈表中刪除節點

2021-06-04 01:04:37 字數 1119 閱讀 3818

題目:在乙個給定的單向鍊錶中,如何遍歷一次刪除特定的節點

解法:這是乙個典型的逆向思維問題,正常的刪除需要把當前節點的前面節點和後面節點鏈結起來,再刪除當前節點,完成任務。當前節點的後續節點比較容易得到,但困難的是無法得到當前節點的前面節點,逆向思維的結果是不刪除當前節點,而是將後面節點的資料拷貝到當前節點,轉而刪除當前節點的後面節點,從而完成刪除操作。**如下:

#include #include templateclass listnode 

t value_;

listnode* next_;

};templateclass list ;

void insert(const t& value) else

size_++;

} size_t size()

bool delete(size_t index)

listnode* current = head_;

int count = 1;

while (count < index)

if (current->next_ == null) else

return true;

} void printlist(visitfun visit_fun)

} private:

listnode* head_;

size_t size_;

};void print(int value)

typedef void (*visit_fun)(int value);

int main(int argc, char** argv)

my_list.printlist(print);

printf("\n");

int rand_index = random() % my_list.size();

printf("to delete:%d\n", rand_index);

my_list.delete(rand_index);

my_list.printlist(print);

printf("\n");

}

參考文獻

程式設計之美3.4

從無頭單鏈表中刪除節點

刪除無頭單鏈表 程式實現很簡單,主要是思路如果打不開的話,就無從下手。如果是帶有頭節點的鍊錶,直接從頭部遍歷,找到需要刪除的節點,然後直接刪除 刪除的方式,加入目前的節點為node 前乙個節點即為pre pre next node next delete node node null 但是目前沒有頭...

《程式設計之美》 從無頭單鏈表中刪除節點

問題 假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點 非第乙個節點,也非最後乙個節點 請將該節點從單鏈表中刪除。分析與解法 若要刪除該節點,正常情況下,應該要知道該節點的前面節點的指標,但是由於單鏈表中沒有頭結點,所以無法追溯到該節點前面的那個節點,因此,這裡採用了 狸貓換太子 的...

程式設計之美 從無頭單鏈表中刪除節點

1.問題描述 假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點 不是第乙個,也不是最後乙個 請將該節點從單鏈表中刪除。如下圖所示 2.分析與解法 假設給定的指標為pcurrent,node pnext pcurren next 其中pcurren next!null,如下圖,因為沒有...