21. 合并两个有序链表(单链表

21. 合并两个有序链表(单链表,第1张

  • 题目链接:21. 合并两个有序链表
  • 考查知识:单链表(合并)
  • 题意描述:将两个升序链表合并为一个新的升序链表
  • 具体代码
    • 方法一:递归

      • 递归边界为一条链空时,直接当前及以后结点直接返回另一条链即可
      • 否则不断取两个链首元素中权值小的做当前结点,并从未连接的结点中递归下一个结点
        class Solution {
        public:
            ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
                if(list1==NULL)return list2;//链1为空,接上链2
        		else if(list2==NULL)return list1;//链2为空,接上链1
        		else if(list1->val<list2->val){//取两个链首元素中权值小的做当前结点,并从未连接的结点中递归下一个结点
        			list1->next=mergeTwoLists(list1->next,list2);
        			return list1; 
        		}else{
        			list2->next=mergeTwoLists(list1,list2->next);
        			return list2;
        		} 
            }
        };
        
    • 方法二:迭代

      • 利用两个链首指针,在都未遍历到链尾情况下比较两指针指向结点权值,将权值小的结点放在结果链后,并让对应链、结果链指针后移
      • 最后两个链表谁还有剩余,则再接上谁即可
        class Solution {
        public:
            ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
                ListNode *list=new ListNode(0),*p=list;//新建伪头结点 
        		while(list1!=NULL&&list2!=NULL){//在两个链表的公共部分,谁结点权值小连上谁,并让对应链、结果链指针后移 
        			if(list1->val<list2->val){
        				p->next=list1;
        				list1=list1->next;
        			}else{
        				p->next=list2;
        				list2=list2->next;
        			}
        			p=p->next;
        		}
        		if(list1)p->next=list1;//两个链表谁有剩余,则再接上谁 
        		else p->next=list2;
        		return list->next; 
            }
        };
        

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存