Java 合并两个有序的链表
2023-09-11 14:22:56 时间
合并两个有序的链表
描述
给定两个有序的链表,合并成一个有序的链表。
图示
思路分析
1) 将head头指针指向两个链表当中第一个较小的结点,用来标记合并后的链表头。
2)定义一个结点s,用来链链表。
3)定义一个结点p,用来遍历第一个链表,指向第一个链表的第一个结点。
4)定义一个结点q,用来遍历第二个链表,指向第二个链表的第二个结点。
5)因为s是用来链链表的,所以首先s指向小的结点,即指向head。
6)比较p和q指向的结点的value值,谁小往后走一个结点。
7)然后s去链接p和q指向的value值较小的结点,如果链接的是q指向的结点,q往后走一个结点,如果链接的是p,p往后走一个结点,链接完成后,s往后走一个结点,等待链接下一个结点。
8)重复步骤7,直到p和q当中的一个为null。
9)因为其中一个链表已经链接完成,为了链接另一个链表的剩余部分,更新s指针(如果p为null,s指向q,如果q为null,s指向p)
首先使head指向两个链表中第一个结点较小的结点,s同时也指向两个链表中第一个结点较小的结点,此时p执行s的下一个结点,q指向第二个链表中的第一个结点。
现在开始链链表
得到结果
代码
/**
* Definition for singly-linked list.
* class Node {
* int value;
* Node next;
* Node(int x) {
* value = x;
* next = null;
* }
* }
*/
public class SingleLink {
private Node head;//用来标记链表的起始位置
//合并两个有序链表
public void mergeeTwoLink(SingleLink link) {
if (link == null) {
return;
}
Node s;//用于链链表
Node p = head;//用于遍历第一个链表
Node q = link.head;//用于遍历第二个链表
//标记合并后的链表头
head = (p.value < q.value) < 0) ? p : q;
//初始化s
s = head;
//谁小谁往后走
if (head == p) {
p = p.next;
} else {
q = q.next;
}
while (p != null && q != null) {
if (p.value < q.value) {
s.next = p;
p = p.next;
} else {
s.next = q;
q = q.next;
}
s = s.next;
}
//其中一个链表已经链完,为了链接另一个链表的剩余部分
//如果p为null,s指向q,如果q为null,s指向p
s.next = p == null ? q : p;
}
相关文章
- hibernate注解实体类(Dept.java)
- Java实现 LeetCode 725 分隔链表(暴力)
- Java实现 LeetCode 263 丑数
- Java实现 LeetCode 206 反转链表
- Java实现 LeetCode 19删除链表的倒数第N个节点
- Java实现 蓝桥杯VIP 算法训练 链表数据求和操作
- [Java]Axis需要高版本的J2sdk: j2sdk-1_4_2_08
- (转载)java多态(2)-------Java转型(向上或向下转型)
- 【JAVA】java中的length和length()
- Atitit 搜索蓝牙设备 powershell的实现 java noede.js python 先用脚本语言python nodejs,不好实现。。Java 也不好实现。。 Netcore可以,
- Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
- 华为OD机试 - 开心消消乐(Java & JS & Python)
- 当年的Java考试:JAVA&移动应用&大数据-大三-社区疫苗接种管理系统(全部源码·保姆式呵护)
- 1小时学会通过Java Swing Design设计java图形化
- 【java】alibaba Fastjson --全解史上最快的JSON解析库
- 【java】Java ArrayList
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
- JAVA学习第十九课(java程序的异常处理 (二))
- Java数组排序和插入
- Java多线程中static变量的使用
- JAVA开发讲义(二)-Java程序设计之数据之谜四
- JAVA开发讲义(二)-Java程序设计之数据之谜三