單向鍊錶的建立
以及一些鍊錶的操作實現
細節見注釋
#include
using namespace std;
//節點類
template
class chainnode
chainnode()
~chainnode()
};//鍊錶類
template
class chain
void
inser
(int n)
;//新增節點
void
sort()
;//鍊錶排序
void
inversion()
;//鍊錶倒置
void
marge
(chain& chain1)
;//合併鍊錶
void
show()
;//輸出鍊錶
void
del_same()
;//鍊錶節點去重
chainnode
*gethead()
//得到頭節點};
//新增節點
template
void chain::
inser
(int n)
tail->next = temp;
tail = temp;
return;}
//鍊錶排序
template
void chain::
sort()
}}return;}
//鍊錶就地倒置
template
void chain::
inversion()
tail = head;
head = p;
}//鍊錶絕對值去重
template
void chain::
del_same()
temp = temp->next;}if
(flag)
//如果刪除節點 為了保證p指標指向arr的前乙個指標 故在這裡只移動arr 但是因為刪除了p和arr之間的那個節點,所以不移動p
else}}
//輸出鍊錶資料
template
void chain::
show()
cout << endl;
return;}
//合併鍊錶
template
void chain::
marge
(chain
& chain1)
intmain()
cout <<
"輸入鍊錶2:"
;for
(int j =
0; j < n; j++
) cout <<
"輸出鍊錶1:"
; chain2.
show()
; cout <<
"輸出鍊錶2:"
; chain3.
show()
; cout <<
"輸出倒置後的鍊錶1:"
; chain2.
inversion()
; chain2.
show()
; cout <<
"輸出倒置後的鍊錶2:"
; chain3.
inversion()
; chain3.
show()
; chain2.
marge
(chain3)
; cout <<
"輸出兩個鍊錶合併後:"
; chain2.
show()
; chain2.
sort()
; cout <<
"輸出兩個鍊錶合併並且排序後:"
; chain2.
show()
; chain2.
del_same()
; cout <<
"輸出去絕對值重後的:"
; chain2.
show()
;return0;
}
輸入第乙個鍊錶的長度:5
輸入第乙個鍊錶的長度:6
輸入鍊錶1:156
9-5輸入鍊錶2:-56
-9105
7輸出鍊錶1:156
9-5輸出鍊錶2:-56
-9105
7輸出倒置後的鍊錶1:-59
651輸出倒置後的鍊錶2:7510
-96-
5輸出兩個鍊錶合併後:-59
6517
510-9
6-5輸出兩個鍊錶合併並且排序後:-9-
5-51
5566
7910輸出去絕對值重後的:-9-
5167
10
單向鍊錶的倒置
首先要判斷當鍊表的長度為0或者1的時候,直接返回當前節點即可,否則需要兩個輔助 指標 pre next,分別指向頭結點的前結點和後結點,不然next屬性改變的時候就會丟失原先列表的結點位址。首先讓pre null,next null 迴圈當head null 的時候,讓next head.next,...
合併排序的鍊錶 leetcode
劍指 offer 25.合併兩個排序的鍊錶 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。示例1 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 選擇兩個鍊錶中的某個鍊錶作為基準 main 將另乙個鍊錶上的元素按照順序要求插入到基準鍊錶 exta 中 設定乙個...
歸併排序(單向鍊錶 陣列實現)
歸併排序 演算法交換鍊錶節點,時間複雜度o nlogn 不考慮遞迴棧空間的話空間複雜度是o 1 首先用快慢指標的方法找到鍊錶中間節點,然後遞迴的對兩個子鍊錶排序,把兩個排好序的子鍊錶合併成一條有序的鍊錶。歸併排序應該算是鍊錶排序最佳的選擇了,保證了最好和最壞時間複雜度都是nlogn,而且它在陣列排序...