2つの順序付きチェーンテーブルを結合する(C言語)
1399 ワード
タイトル
2つの順序付きチェーンテーブルを新しい順序付きチェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:
入力:1->2->4、1->3->4出力:1->1->2->3->4->4
解決策
1.配列順序が小さいから大きいまで並べ替えられているので、戻りポインタheadが2つのチェーンテーブルの最初の要素の小さいチェーンテーブルを指すことを確立する.2つのチェーンテーブルを結合します.2つのポインタp 1,p 2がそれぞれ2つのチェーンテーブルを指し,p 1,p 2が指す要素の値を順次比較し,小さなものを新しいチェーンテーブルに接続し,後方に移動する.p 1まで、p 2のうちの1つはNULLを指す.3.他のp 1がNULLを指していないチェーンテーブルを新しいチェーンテーブルの後ろに接続します.(特にはっきり言っていないので、コードを見た方が分かりやすい)
コード#コード#
2つの順序付きチェーンテーブルを新しい順序付きチェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:
入力:1->2->4、1->3->4出力:1->1->2->3->4->4
解決策
1.配列順序が小さいから大きいまで並べ替えられているので、戻りポインタheadが2つのチェーンテーブルの最初の要素の小さいチェーンテーブルを指すことを確立する.2つのチェーンテーブルを結合します.2つのポインタp 1,p 2がそれぞれ2つのチェーンテーブルを指し,p 1,p 2が指す要素の値を順次比較し,小さなものを新しいチェーンテーブルに接続し,後方に移動する.p 1まで、p 2のうちの1つはNULLを指す.3.他のp 1がNULLを指していないチェーンテーブルを新しいチェーンテーブルの後ろに接続します.(特にはっきり言っていないので、コードを見た方が分かりやすい)
コード#コード#
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p1,*p2,*q1,*q2,*p,*head;
p1=l1;
p2=l2;
if(l1==NULL){
return l2;
}else if(l2==NULL){
return l1;
}
if( p1->val < p2->val ){
head=p1;
p1=p1->next;
}else{
head=p2;
p2=p2->next;
}
p=head;
while(p1!=NULL && p2!=NULL){
if(p1->val <= p2->val){
p->next=p1;
p=p1;
p1=p1->next;
}else{
p->next=p2;
p=p2;
p2=p2->next;
}
}
if(p1!=NULL){
p->next=p1;
}else{
p->next=p2;
}
return head;
}