順序合併兩個非有序的鍊錶 C語言寫法

2021-10-23 06:14:45 字數 2682 閱讀 9537

題目要求:給定由整數組成的兩個無序陣列,根據順序合併成乙個陣列。

輸入要求:輸入包括兩行,每行由若干個由->分隔的整數組成,分別表示以最左整數為煉表頭,單向指向右側節點的鍊錶,每行輸入均以 .結尾。

輸出要求:輸出為合併後的單向鍊錶,由->表示其間的指標,最終指向由null表示的空值。在合併過程中,比較兩個鍊錶當前待合併的第乙個元素,選擇其中較小的那個元素放入合併後的陣列。

輸入格式:輸入兩行字串,每行字串由 有符號整數、->和.組成。

輸出格式:輸出一行字串,表示合併後的陣列。

樣例輸入

1->2->3.

1->0->2.

樣例輸出

1->1->0->2->2->3->null

關於這道題,考察鍊錶的熟練程度:會打鍊錶、並且鍊錶之間比較來進行插入操作。

要先打好結構體:

struct node

;

打煉表模板:

struct node * head,

* p,

* q;

//先定義必須的指標;

head=

null

;//讓頭指標指向null,不然後面判斷head沒法進行。

while

(scanf

("%d->"

,&a)

)//輸入的同時也判斷輸入的內容,如果是"1->"scanf返回的是1,也是true,當輸入'.'的時候,scanf返回的是0,false。被留在緩衝區

else

q=p;

//改選中的結點為下乙個結點

}

那麼我們可以根據這個模板,打出兩個鍊錶:

struct node * head,

* p,

* q,

* t,

* head1,

* p1,

* q1;

int a,b;

head=

null

; head1=

null

;while

(scanf

("%d->"

,&a)

)//這是第乙個鍊錶開始

else

q=p;

}getchar()

;//為了清除緩衝區中殘留的'.',不影響到下乙個

while

(scanf

("%d->"

,&b)

)//第二個鍊錶開始

else

q1=p1;

}

那麼到了交換的時候了,我們先定義乙個函式來專門交換兩個鍊錶之間(遞迴實現)

struct node *

exchange

(struct node *head,

struct node *head1)

//定義的函式返回值為head結點位址

struct node *head3=

null

;//該值被返回,用來做索引該鍊錶的結點。

if(head->num<=head1->num)

//開始比較大小

else

return head3;

}

最後返回的是乙個已經排好序的鍊錶的頭結點,只要利用頭結點,並且按結點迴圈就可以依次輸出我們所需的值:

t=

exchange

(head,head1)

;//傳給t

while

(t->next!=

null

)printf

("%d->null"

,t->num)

;return

0;

總**圖:

#include

#include

struct node

;struct node *

exchange

(struct node *p,

struct node *p1)

;int

main()

else

q=p;

}getchar()

;while

(scanf

("%d->"

,&b)

)else

q1=p1;

} t=

exchange

(head,head1)

;while

(t->next!=

null

)printf

("%d->null"

,t->num)

;return0;

}struct node *

exchange

(struct node *head,

struct node *head1)

struct node *head3=

null;if

(head->num<=head1->num)

else

return head3;

}

順序合併兩個非有序的鍊錶

給定由整數組成的兩個無序陣列,根據順序合併成乙個陣列。輸入包括兩行,每行由若干個由 分隔的整數組成,分別表示以最左整數為煉表頭,單向指向右側節點的鍊錶,每行輸入均以 結尾。輸出為合併後的單向鍊錶,由 表示其間的指標,最終指向由null表示的空值。在合併過程中,比較兩個鍊錶當前待合併的第乙個元素,選擇...

順序合併兩個非有序的鍊錶(C 且不用鍊錶實現)

給定由整數組成的兩個無序陣列,根據順序合併成乙個陣列。輸入包括兩行,每行由若干個由 分隔的整數組成,分別表示以最左整數為煉表頭,單向指向右側節點的鍊錶,每行輸入均以 結尾。輸出為合併後的單向鍊錶,由 表示其間的指標,最終指向由null表示的空值。在合併過程中,比較兩個鍊錶當前待合併的第乙個元素,選擇...

合併兩個有序鍊錶 C

合併兩個有序鍊錶 遞迴實現 演算法思想 遞迴終止條件 若head1為空,返回head2指標 head 若head2為空,返回head1指標 head 遞迴過程 1 若head1 data head2 data head 指標應該指向head2所指向的節點,而且head next應該指向head1和h...