LeetCode OJ——Merge Two Sorted Lists

来源:互联网 发布:mac os10.8.5升级10.9 编辑:程序博客网 时间:2024/05/24 06:32

题目
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.


代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        ListNode    *p1;    //指向l1的指针        ListNode    *p2;    //指向l2的指针        ListNode    *pre;   //指向组合链遍历指针前的一个节点指针        ListNode    *tmp;        int         flag;   //当flag=1时,表示l1的头结点为新链的头结点,当flag=2时,l2头结点才是        p1 = l1;        p2 = l2;        if (l1 == NULL)      //链l1为空        {            return l2;        }        if (l2 == NULL)      //链l2为空        {            return l1;        }        if (p1->val <= p2->val)//当l1的头结点不大于l2的头节点,则新链的头结点为l1的头结点,反之,为l2        {            pre = p1;            while (1)            {                if (p1 == NULL && p2 != NULL)    //链l1遍历完,l2未遍历完,由于头结点在l1上,故l1尾节点要加上l2                {                    pre->next = p2;                    return l1;                }                if (p1 != NULL && p2 == NULL)    //链l1遍未历完,l2遍历完,由于头结点在l1上,故直接返回l1                {                    return l1;                }                if (p1->val > p2->val)     //将l2中的节点插入到l1中,继续向前遍历                {                    pre->next = p2;                    tmp = p2;                    p2 = p2->next;                    tmp->next = p1;                    pre = pre->next;                }                else{                    pre = p1;                    p1 = p1->next;                }            }        }        else{            pre = p2;            while (1)            {                if (p1 == NULL && p2 != NULL)    //链l1遍历完,l2未遍历完,由于头结点在l2上,故直接返回l2                {                    //pre->next = p2;                    return l2;                }                if (p1 != NULL && p2 == NULL)    //链l1遍未历完,l2遍历完,由于头结点在l2上,故l1尾节点要加上l1                {                    pre->next = p1;                    return l2;                }                if (p2->val > p1->val)     //将l2中的节点插入到l1中,继续向前遍历                {                    pre->next = p1;                    tmp = p1;                    p1 = p1->next;                    tmp->next = p2;                    pre = pre->next;                }                else{                    pre = p2;                    p2 = p2->next;                }            }        }    }};

结果:

这里写图片描述


0 0
原创粉丝点击