两个链表合并一个链表

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode* p = list1;
	ListNode* q = list2;
	ListNode* ans = new ListNode(-1,list1!=NULL?list1:list2);
	ListNode* ansp = ans;
   
		while (p && q)
		{
			if (p->val >= q->val)
			{
				ans->next = q;
				ans = ans->next;
				q = q->next;
			}
			else {
				ans->next = p;
				ans = ans->next;
				p = p->next;
			}
		}
	 if (p)
	{
		ans->next = p;
	}
	if (q)
	{
		ans->next = q;
	}
	return ansp->next;
    }
}

其中包含一个名为 mergeTwoLists 的公共方法,用于合并两个已排序的链表。该方法接受两个参数 list1 和 list2,返回一个合并后的链表。

方法内部创建了两个指针 p 和 q,分别指向 list1 和 list2 的头节点。接着,创建一个新链表 ans,并将 ans 的头节点设为 -1,表示新链表中不包含头节点。同时,创建一个指针 ansp 指向 ans 的头节点,用于后续修改。

接下来,在 while 循环中,使用指针 p 和 q 遍历两个链表。如果当前节点的值大于等于另一个节点的值,则将当前节点的下一个节点设为另一个节点,并将 ans 的指针向后移动,直到其中一个链表遍历完毕。如果当前节点的值小于另一个节点的值,则将当前节点的下一个节点设为当前节点,并将 ans 的指针向后移动,直到其中一个链表遍历完毕。最后,当其中一个链表遍历完毕时,需要将 ansp 的指针指向其最后一个节点,表示新链表中不包含两个链表的尾节点,只包含剩余节点。

最后,方法返回 ansp 的指针 next,表示合并后的链表的头节点。如果 list1 或 list2 为空,则 next 指向 ans 的头节点。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值