本文主要是介绍【链表】【打卡第137道】:《剑指Offer》3刷:JZ25 合并两个排序的链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、题目描述
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000
要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:
2、 算法分析
分为两种情况:
先创建一个结果集的链表。
ListNode node = new ListNode(0);
并且定义当前结点current指向node
current往后走,node始终指向结果链表的开头。
①当两个链表都不为Null的时候,比较两个链表的值,将较小的值附加在node的下一个结点。
②当其中的一个链表为null的时候,直接将后面的结点复制到node下即可。
3、代码实现
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/public class Solution {public ListNode Merge(ListNode list1,ListNode list2) {ListNode node = new ListNode(0);ListNode current = node;while(list1 != null && list2 != null){if(list1.val >= list2.val){current.next = list2;list2 = list2.next;}else{current.next = list1;list1 = list1.next;}current = current.next;}if(list1 != null){current.next = list1;}if(list2 != null){current.next = list2;}return node.next;}
}
这篇关于【链表】【打卡第137道】:《剑指Offer》3刷:JZ25 合并两个排序的链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!