輸入兩個遞增連結串列,合併為一個遞增連結串列(面試題)
阿新 • • 發佈:2019-01-11
輸入兩個遞增連結串列,合併為一個遞增連結串列。
public class LinkedTest {
public static void main(String[] args) {
Node headNode1 = null;
Node headNode2 = null;
Node currNode1 = null;
Node currNode2 = null;
// 構造有序連結串列1 有序連結串列2
for (int i = 10; i >= 0; i--) {
if (i % 2 == 0) {
currNode1 = new Node(headNode1, i);
headNode1 = currNode1;
} else {
currNode2 = new Node(headNode2, i);
headNode2 = currNode2;
}
}
System.out.print("有序連結串列1 -- ");
print(headNode1);
System.out.print("有序連結串列2 -- " );
print(headNode2);
System.out.print("合併有序連結串列 -- ");
print(merage(headNode1, headNode2));
}
// 將兩個有序連結串列合為一個有序連結串列,使用遞迴的過程
public static Node merage(Node n1, Node n2) {
if (n1 == null) {
return n2;
}
if (n2 == null) {
return n1;
}
Node resNode = null;
if (n1.data > n2.data) {
resNode = n2;
resNode.next = merage(n1, n2.next);
} else {
resNode = n1;
resNode.next = merage(n1.next, n2);
}
return resNode;
}
// 列印輸出連結串列
public static void print(Node n) {
if (n == null) {
System.out.println("連結串列為空");
return;
}
for (Node node = n; node != null; node = node.next) {
System.out.print(node.data + " ");
}
System.out.println();
}
}
class Node {
Node next;
int data;
public Node(Node next, int data) {
super();
this.next = next;
this.data = data;
}
}