面試題17 合併兩個排序的鍊錶

2021-08-02 19:06:27 字數 1464 閱讀 9797

public

class

test17

/*** 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的

**@param head1 第乙個有序鍊錶

*@param head2 第二個有序鍊錶

*@return 合併後的有序煉表頭

*/public

static listnode merge(listnode head1, listnode head2)

// 如果第二個結點為空,返回第乙個煉表頭結點

if (head2 == null)

// 建立乙個臨時結點,用於新增元素時方便

listnode root = new listnode();

// 用於指向合併後的新鏈的尾結點

listnode pointer = root;

// 當兩個鍊錶都不為空就進行合併操作

while (head1 != null && head2 != null) else

// 將指標移動到合併後的鍊錶的末尾

pointer = pointer.next;

}// 下面的兩個if有且只乙個if會內的內容會執行

// 如果第乙個鍊錶的元素未處理完將其,接到合併鍊錶的最後乙個結點之後

if (head1 != null)

// 如果第二個鍊錶的元素未處理完將其,接到合併鍊錶的最後乙個結點之後

if (head2 != null)

// 返回處理結果

return root.next;

}/**

* 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的

**@param head1 第乙個有序鍊錶

*@param head2 第二個有序鍊錶

*@return 合併後的有序煉表頭

*/public

static listnode merge2(listnode head1, listnode head2)

// 如果第二個鍊錶為空,返回第乙個煉表頭結點

if (head2 == null)

// 記錄兩個鍊錶中頭部較小的結點

listnode tmp = head1;

if (tmp.value < head2.value) else

// 返回處理結果

return tmp;

}/**

* 輸出鍊錶的元素值

**@param head 鍊錶的頭結點

*/public

static

void

printlist(listnode head)

system.out.println("null");

}public

static

void

main(string args)

面試題17 合併兩個排序的鍊錶

題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。hint 請務必使用鍊錶。輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為兩個整數n和m 0 n 1000,0 m 1000 n代表將要輸入的第乙個鍊錶的元素的個數...

面試題17 合併兩個排序的鍊錶

題目 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。非遞迴 第一種方法 非遞迴 struct listnode listnode mergetwolist listnode plistonehead,listnode plisttwohead 如果第二個鍊錶為空,則第...

面試題17 合併兩個排序的鍊錶

struct listnode 面試題17 合併兩個排序的鍊錶 include stdafx.h include list.h include include listnode merge listnode phead1,listnode phead2 else return pmergedhead...