注意:这道题的意思可能读不懂(单调不减也可能给是这样1,2,4,3,5,2)。所以我百度了一下。我是按照这个意思做的:
输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的。
尝试一
结果:通过
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
/*判空处理*/
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
ListNode i=list1;
ListNode j=list2;
ListNode head;
//todo 保存头结点
if(list1.val<=list2.val){
head=list1;
Merge(list1,i,list2,j);
}else{
head=list2;
Merge(list2,j,list1,i);
}
return head;
}
private void Merge(ListNode list1,ListNode i,ListNode list2,ListNode j){
if(list1 ==null || list2==null){
return;
}
/*改变节点*/
while(i.next!=null && i.next.val<j.val ){
/*移动i*/
i=i.next;
}
//先把list1存起来,不然后面找不到继续处理的节点
list1=i.next;
i.next=j;
i=list1;
/*这里要交换顺序*/
Merge(list2,j,list1,i);
return ;
}
}
分析:
结论
- i,j 两个引用同事指向一个对象。我让j指向另一个对象,并不会影响i指向之前那个对象。
本文详细解析了如何合并两个已排序的链表,并保持合并后链表的递增排序特性。通过具体代码实现,展示了判空处理、节点比较及链接过程,确保最终链表有序。
517

被折叠的 条评论
为什么被折叠?



