乙個面試題目,將兩個遞增的有序單鏈表合併成乙個遞增單鏈表。有兩種理解:
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...