題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。例如,輸入圖1中的鍊錶1和鍊錶2,則合併之後的公升序鍊錶如鍊錶3所示。鍊錶節點定義如下:
圖1:合併兩個排序鍊錶的過程
【解題思路】
已知有兩條鍊錶,合併成一條新鍊錶,所以定義乙個指標(mergephead)指向新鍊錶。
本題用遞迴方法解決。首先,判斷兩條鍊錶的情況(空鍊錶和多個節點),再判斷兩條煉表頭節點值的大小,以作為遞迴的條件,最後返回新鍊錶。
【**】
node* mergelist(plist phead1, plist phead2)
else
if (phead2 ==
null)
pnode mergephead =
null;
if (phead1->
data
< phead2->
data)
else
return mergephead;
}
【程式】
#define _crt_secure_no_warnings 1
#define _crt_secure_no_warnings 1
# include
# include
# include
typedef int datatype;
typedef struct node
node, *plist, *pnode;
void initlinklist(plist *pplist)
void pushback(plist *pplist, datatype x)
pnode->data = x;
pnode->next = null;
if (cur == null)
else
cur->next = pnode;
}}void display(plist plist)
printf("over\n");
}void destroy(plist *pplist)
*pplist = null;
}node* mergelist(plist phead1, plist phead2)
else
if (phead2 == null)
pnode mergephead = null;
if (phead1->data < phead2->data)
else
return mergephead;
}void test1()
int main()
執行結果為:
【測試】
1、功能測試:
1)輸入的鍊錶有多個節點;
2)節點的值互不相同或者存在值相等的多個節點。
2、特殊輸入測試:
1)兩條鍊錶的乙個或者兩個頭節點為null指標;
2)兩條鍊錶中只有乙個節點。
2 兩數相加 類似兩條鍊錶的合併
題目描述 給定兩個非空鍊錶來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回乙個新的鍊錶。你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 原因 342 465 807 題目分析 這道題目就是類似於兩道鍊...
將兩條公升序鍊錶合成一條公升序鏈
將兩個公升序鏈合成為一條,即同時跑兩根鍊錶,遇到小值,指標p指上去,然後處理當前結點,尾插到新的鍊錶中 include include define n 5 typedef struct nodeelemsn elemsn creatlink int a return h elemsn fun el...
合併兩個排序鍊錶
struct listnode class solution else while pstart1 null pstart2 null plast next pstart1 plast pend1 pend1 pend1 next pstart1 pend1 else plast next psta...