面試題目 合併兩個有序單鏈表

2021-10-23 05:49:28 字數 1502 閱讀 4592

乙個面試題目,將兩個遞增的有序單鏈表合併成乙個遞增單鏈表。有兩種理解:

1、new乙個單鏈表,返回新的頭節點

2、在原煉表上操作,返回新的頭節點

第一種實現較為簡單,只需要從頭比較鍊錶的節點,將較小的插入新鍊錶,被插入的節點指標後移,直至遍歷整個鍊錶。而在原表操作就相對複雜一點,主要有三部分:首先確定返回的頭節點,中間遍歷重定向鍊錶指標,當某乙個鍊錶先遍歷完之後末尾的處理。在原表操作的**如下:

#include

using

namespace std;

struct node};

node*

sortnode

(node* head1, node* head2)

else

if(prenode1-

>val > prenode2-

>val)

while

(head1 !=

nullptr

&& head2 !=

nullptr

) prenode1 = head1;

head1 = head1-

>next;}if

(prenode2-

>val <= prenode1-

>val)

prenode2 = head2;

head2 = head2-

>next;}}

if(head2 ==

nullptr

&& head1 !=

nullptr

) prenode1 = head1;

head1 = head1-

>next;

} prenode2-

>next = prenode1;

}else

if(head1 ==

nullptr

&& head2 !=

nullptr

) prenode2 = head2;

head2 = head2-

>next;

} prenode1-

>next = prenode2;

}else

else

}return newhead;

}void

print

(node *head)

else}}

intmain()

node *head2 =

newnode(3

);cur = head2;

for(

int i =

5; i <5;

++i)

print

(head1)

;print

(head2)

; node *head =

sortnode

(head1, head2)

;print

(head)

;return0;

}

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...

合併兩個有序單鏈表

思路 第一種 遞迴法 這個方法不好想,遞過去的時候做的事情是找到新的單鏈表的下乙個節點,歸的時候做的是告訴每個節點的next是什麼繫結關係,帶入資料就能知道怎麼回事 public listnode merge listnode a,listnode b if b null listnode newh...

合併兩個有序單鏈表

題目 給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後的鍊錶的頭節點。例如 0 2 3 7 null 1 3 5 7 9 null 合併後的鍊錶為 0 1 2 3 3 5 7 7 9 null 本題考察鍊錶基本操作 關鍵是能寫出時間複雜度o m...