合并有序链表

 思路:首先检测两个链表是否为空,如果为空直接返回另一个链表即可。

接着创建一个空节点,在将这个空结点赋值给一个临时结点。

第一步,循环检测两个链表都不为空的情况,直到其中一个链表为空结束循环

第二步,判断链表1的值是否大于等于链表2的值,如果等式成立,则临时结点指向链表2,并更新链表2的指针。

否则,临时结点指向链表1,并更新链表1的结点。然后更新临时结点的指针,使其指向下一位。依此循环,直到其中一个链表指针指向为空。

第三步,循环外判断链表是否为空,如为空则临时结点指向另一个不为空的结点。

最后返回虚拟头结点的下一位结点。

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        if(list1==NULL)
        {
            return list2;
        }
        if(list2==NULL)
        {
            return list1;
        }

        ListNode* node=new ListNode(0);
        ListNode* tmp=node;

        while(list1!=NULL && list2!=NULL)
        {
            if(list1->val >= list2->val)
            {
                tmp->next=list2;
                list2=list2->next;
            }
            else
            {
                tmp->next=list1;
                list1=list1->next;
            }
            tmp=tmp->next;
        }
if(list1==NULL) { tmp->next=list2; }else{ tmp->next=list1; } return node->next; }

 

posted @ 2023-09-19 15:28  该说不唠  阅读(26)  评论(0)    收藏  举报