笔试题34. LeetCode OJ (21)

来源:互联网 发布:php rename 移动文件 编辑:程序博客网 时间:2024/06/05 22:32

已经已连续做了好几道题了,感觉停不下来了,突然来了兴趣了,这个题让我觉得思路很清晰,合并两个排序的链表。我的思路如下:分别从两个链表里面摘取节点放到新的链表中,最后摘到一个也不留就行了。不过需要注意的是一些小细节,主要的注意事项如下:

1.两空(两个空的链表)

2.一空(一个链表为空一个部位空)

3.一个摘完了,另外的可能还有节点(这个需要好好注意一下,很容易出错的)

好了,见代码吧:

/** * 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)     {        //类似于从两个链表上取下节点,放到newHead中去        if(l1 == NULL && l2 == NULL)        {            return NULL;        }        if(l1 == NULL)        {            return l2;        }        if(l2 == NULL)        {            return l1;        }                ListNode * newHead=NULL;        if(l1->val <= l2->val)        {            newHead=l1;            l1=l1->next;        }        else        {             newHead=l2;             l2=l2->next;        }        newHead->next = NULL;        ListNode *cur = newHead;        while(l1 && l2)        {            if(l1->val <= l2->val)            {                cur->next = l1;                l1=l1->next;            }            else            {                cur->next = l2;                l2 = l2->next;            }            cur=cur->next;            cur->next=NULL;        }                if(l1)        {//说明 l2 完了,只剩 l1 了            cur->next = l1;            }        if(l2)        {//说明 l1 完了,只剩 l2 了            cur->next=l2;        }                return newHead;    }};
结果如下:



1 0
原创粉丝点击