剑指offer:合并两个排序的链表

本文介绍了一种将两个单调递增链表合并成一个新链表的方法,确保新链表保持单调不减的顺序。通过同步遍历和比较两个链表的节点值,将较小值的节点插入到新链表中,直至所有节点被处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

期望:

输入:1→2→3→4,      2→5→6→7

输出:1→2→2→3→4→5→6→7

 

思路:

建立一个新的链表,依次同步遍历比较两个递增链表中元素的大小,把较小的那个放入新链表,该链表和新链表指针同时后移。

step1:建立一个新链表head,让curr指针指向它.

step2:同时遍历比较list1和list2,把curr与值较小的节点进行连接,同时两个指针后移。

step3:继续迭代,比较其他节点。

step4:两个链表最后肯定有一个链表先遍历完,把没有遍历完的那个链表的剩余部分直接接在新链表的后面。

实现:

public ListNode Merge(ListNode list1,ListNode list2) {
		if(list1==null&&list2==null){
			return null;
		}
		if(list2==null){
			return list1;
		}
		if(list1==null){
			return list2;
		}
		ListNode curr=new ListNode(-1);   //创建一个当前指针
		ListNode root=curr;//头结点
		while(list1!=null&&list2!=null){
			if(list1.val<list2.val){
				curr.next=list1;
				list1=list1.next;
			}else{
				curr.next=list2;
				list2=list2.next;
			}
			curr=curr.next;	
		}
		curr.next=(list1!=null?list1:list2);
		return root.next;	
		}

参考:https://blog.youkuaiyun.com/gjpzl/article/details/80151394

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值