本文主要是介绍普歌-合并两个有序链表java,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
第一种:
暴力破解
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {//链表的首个值不能为0,当首个参数为0时,代表着链表为空ListNode head = new ListNode(-1);ListNode pre = head;//判断链表不为空while(list1 != null && list2 != null){if(list1.val <= list2.val){pre.next = list1;list1 = list1.next;}else{pre.next = list2;list2 = list2.next;}pre = pre.next;}//合并后的list1或list2有个未被合并完,将尾指针指向未合并的链表,小的在前pre.next = list1 == null ? list2 : list1;return head.next;}
}
第二种
递归
判断 list1 和 list2 头结点哪个更小,较小结点. next 指针指向其余结点的合并结果。(调用递归)
当两个链表都为空时,表示我们对链表已合并完成,递归结束。
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1 == null){return list2;}else if(list2 == null){return list1;}else if(list1.val < list2.val){list1.next = mergeTwoLists(list1.next,list2);return list1;}else{list2.next = mergeTwoLists(list1,list2.next);return list2;}}
}
- 作者:麦克猫Cat
- 本文版权归作者和CSDN共有,欢迎交流
这篇关于普歌-合并两个有序链表java的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!