合併兩條排序的鍊錶

2021-08-06 07:12:17 字數 1775 閱讀 6390

題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。例如,輸入圖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...