合并两个有序单链表(Java)
2017-10-23 13:22
295 查看
思想:
准备两个链表l1和l2:判断是否有链表为空:如果l1为空,则不用比较直接返回l2,如果l1为空,则直接返回l2;
比较l1和l2节点,选出最小的那个节点,将该节点设为合并后的链表的head(头)节点,同时将指向该节点的l1或l2后移,方便接下来的比较;
设置一个变量temp指向head节点,用于之后连接其它节点;
再比较l1和l2节点,同样选出小的那个节点,将该节点设为合并后的链表的第二个节点,用temp.next表示该节点,同时将指向该节点的l1或l2后移;
重复比较l1和l2节点,直到l1或l2节点为null;
此时,必定有一个链表中的所有节点都放入了新链表中,只要将另一个链表中的剩余的所有节点都接到新链表之后就可以了。
1.单链表的节点的结构:
public class ListNode { int val;//节点的属性,存储节点的值 ListNode next;//节点的属性,存储了下一个节点的地址 ListNode(int x) { val = x; } }
2.合并链表的方法:
class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode head = null; if (l1 == null) { return l2; } if (l2 == null) { return l1; } if (l1.val <= l2.val) {//如果l1节点的值小于等于l2节点的值,由于这两个链表是有序的,所以合并后最小的节点(head节点)就是它们两者中的小者 head = l1; l1 = l1.next;//后移,用于继续比较选出接下来最小的节点 }else { head = l2; l2 = l2.next; } ListNode temp = head; //接着比较两个链表,对两个链表中的最小的节点进行比较选出最小的,也就是合并后的第二小的节点,循环知道有一个链表为空 while (l1 != null && l2 != null) { if (l1.val <= l2.val) { temp.next = l1; l1 = l1.next; }else { temp.next = l2; l2 = l2.next; } temp = temp.next; } if (l1 == null) { temp.next = l2; } if (l2 == null) { temp.next = l1; } return head; } }
相关文章推荐
- Java单链表基本操作(八)--合并两个有序单链表
- Java 非递归 和非递归方法 实现两个有序单链表的合并
- 两个有序单链表合并成一个有序单链表的java实现
- java 合并两个有序单链表
- 两个有序单链表合并成一个有序单链表的java实现
- Java 合并两个有序链表
- 牛客网编程-合并两个有序链表(java)
- 【C语言】两个有序单链表的合并
- 合并两个有序单链表
- 两个有序单链表的合并
- 两个有序单链表的合并
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表
- Java实现两个有序的单项链表的合并
- 两个有序单链表合并
- 合并两个有序数组Java实现
- 两个有序单链表的合并&两个有序数组的合并
- 合并两个有序单链表,使得合并后的链表仍然有序
- 合并两个有序单链表C++
- 面试题---两个有序单链表的合并