java实现两个有序单链表合并
时间: 2023-09-28 11:11:08 浏览: 138
要实现两个有序单链表的合并,可以按照以下步骤进行:
1. 创建一个新的链表头节点,并用一个变量newHead指向它。
2. 创建两个当前节点变量,分别指向两个有序链表的头节点,命名为list1和list2。
3. 使用一个循环遍历两个有序链表,直到其中一个链表为空。
4. 在循环内部,比较list1和list2当前节点的值大小。
- 如果list1的值小于等于list2的值,将list1的节点连接到新链表中,并将list1指针后移。
- 如果list2的值小于list1的值,将list2的节点连接到新链表中,并将list2指针后移。
5. 循环结束后,将剩余未遍历完的链表连接到新链表的末尾。
6. 返回新链表的头节点newHead。
以下是Java代码示例:
```java
class Node {
int value;
Node next;
public Node(int value) {
this.value = value;
}
}
public class Main {
public static Node mergeLinkedLists(Node list1, Node list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
Node newHead;
if (list1.value <= list2.value) {
newHead = list1;
list1 = list1.next;
} else {
newHead = list2;
list2 = list2.next;
}
Node current = newHead;
while (list1 != null && list2 != null) {
if (list1.value <= list2.value) {
current.next = list1;
list1 = list1.next;
} else {
current.next = list2;
list2 = list2.next;
}
current = current.next;
}
if (list1 != null) {
current.next = list1;
}
if (list2 != null) {
current.next = list2;
}
return newHead;
}
public static void main(String[] args) {
// 创建第一个有序链表
Node list1 = new Node(1);
list1.next = new Node(3);
list1.next.next = new Node(5);
// 创建第二个有序链表
Node list2 = new Node(2);
list2.next = new Node(4);
list2.next.next = new Node(6);
// 合并链表
Node mergedList = mergeLinkedLists(list1, list2);
// 打印合并后链表的值
Node current = mergedList;
while (current != null) {
System.out.print(current.value + " ");
current = current.next;
}
}
}
```
运行上述代码,将输出合并后链表的值:1 2 3 4 5 6。
阅读全文