面试题25:合并两个排序的链表

97 阅读1分钟

题目

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

思路

合并列表和合并链表都是有一定的套路。由于是链表,在前面加一个头节点,消除特殊化

代码

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* l=(ListNode*)malloc(sizeof(ListNode));#新创一个头节点
        l->next=NULL;
        ListNode *ll=l;# ll指针指向l,连表
        ListNode *p=l1;
        ListNode *q=l2;
        ListNode *r=NULL;
        while(p&&q){
            if(p->val<q->val){
                r=p->next;
                p->next=NULL;
                ll->next=p;
                ll=p;
                p=r;
            }
            else{
                r=q->next;
                q->next=NULL;
                ll->next=q;
                ll=q;
                q=r;
            }
        }
        if(p)
            ll->next=p;
        if(q)
            ll->next=q;
        return l->next;
    }
};

题目链接(leetcode-cn.com/problems/he…)