單向鍊錶的合併 排序 就地倒置 絕對值去重

2021-10-24 19:50:32 字數 2472 閱讀 2638

單向鍊錶的建立

以及一些鍊錶的操作實現

細節見注釋

#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,而且它在陣列排序...