遞迴刪除單鏈表中所有值為x的元素 單鏈表逆序

2021-10-11 02:31:32 字數 1266 閱讀 3648

**有解釋,可能一開始看不到,更著動手多敲幾遍就能掌握了。加油。

題目描述:

給定乙個帶頭結點的單鏈表,請將其逆序。即如果單鏈表原來為head->1->2->3->4->5->6->7,那麼逆序後變為head->7->6->5->4->3->2->1。

先定義好鍊錶結構

# -*- coding: utf-8 -*-
思路:1、首先將1 -> 2 -> 3 ->4變成1 -> 4-> 3 -> 2(其中2 -> 3 ->4變成4-> 3 -> 2,採用遞迴方式實現)

2、再將head頭節點1移到尾巴,作為尾結點,由於上乙個尾結點2,是原先的head.next,此時將2的next指標指向頭節點,即head.next.next = head,然後尾結點指向空,即head.next = none

3、特殊情況:頭節點為空或者只有1個節點

"""
演算法效能分析:

由於遞迴法也只需要對鍊錶進行 次遍歷,因此,演算法的時間複雜度也為 o(n) ,其中,n為鍊錶的長度。

缺點是:演算法實現的難度較大,此外,由於遞迴法需要不斷地呼叫自己,需要 額外的壓技與彈枝操作,因此, 與方法 相比效能會有所 降。

移動:第1次指標操作,將當前節點指標cur.next值臨時儲存到nex,即nex = cur.next, 第2次指標操作,將當前的指標cur.next指向其前乙個節點pre, 即cur.next = pre,這樣就實現了對單個節點的操作。

特殊情況:鍊錶為空鍊錶、鍊錶為單節點,直接返回即可,無需逆序操作

"""
直假定原煉表為head->1->2->3->4->5->6->7,在遍歷到2的時候,將其插入到頭結點後,鍊錶變為head->2->1->3->4->5->6->7,同理將後序遍歷到的所有結點都插入到頭結點head後,就可以實現鍊錶的逆序。實現**如下:

"""

# 當然,也許還有別的方法,比如建乙個輔助的鍊錶
參考:《python程式設計師寶典》

刪除單鏈表中所有值為x的元素

刪除所有值為x的單鏈表中的元素 首先,我們先考慮第一種情況,就是說值刪除第乙個值為x的元素,這個比較簡單,只需要挨個比較x和鍊錶節點的值,找到值相同的節點的前乙個就可以刪除這個節點了。然後我們可以考慮兩種辦法第一種就是遞迴的去刪除,這個比較簡單,只需要刪除第乙個值和我們要刪除的值一樣的節點,然後把下...

刪除不帶頭結點的單鏈表工中所有值為x的結點

1.設計乙個遞迴演算法,刪除不帶頭結點的單鏈表工中所有值為x的結點。include include include include include include include include includeusing namespace std 鍊錶節點結構 typedef struct nod...

單鏈表刪除所有值為x的元素 順序表基本操作上機實驗

理解線性結構的基本概念,掌握兩種基本的儲存結構 順序儲存結構 順序表 和鏈式儲存結構 單鏈表 用c語言實現在兩種儲存結構上的對應操作 包括建立 刪除插入元素 遍歷等 鞏固強化c程式設計的基本方法和能力。完成順序表的建立 元素刪除 遍歷等操作,具體內容如下 有序的一組整數 1,2,3,4,6 設計順序...