您的位置:首页 > 其它

leetcode-21-Merge Two Sorted Lists

2016-05-10 17:30 337 查看
题目: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。

将两个有序链表按序合并。

主要是链表的操作,与链表有关的题就拿c++做了。

思路:依次比较两个链表的当前元素的val值,p指向小的那个,同时小的那个指针后移。注意链表为空的情况,指针后移出现一个为空时跳出循环,在下面的if判断是哪个还不为空则将p指向它那一串即可。

c++:

/**
* 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* p=new ListNode(0);
ListNode* q=p;     //q保存链表头部
while (l1 && l2)
{
if (l1->val >= l2->val)
{
p->next=l2;
l2=l2->next;
}
else
{
p->next=l1;
l1=l1->next;
}
p=p->next;    //注意p指针也要后移
}
if(l1) p->next=l1;
if(l2) p->next=l2;
return q->next;   //从第二个node开始取,舍弃开始的0
}
};


10ms AC。

贴个python的:

class Solution(object):
'''
题意:合并两个有序链表
'''
def mergeTwoLists(self, l1, l2):
dummy = ListNode(0)
tmp = dummy
while l1 != None and l2 != None:
if l1.val < l2.val:
tmp.next = l1
l1 = l1.next
else:
tmp.next = l2
l2 = l2.next
tmp = tmp.next
if l1 != None:
tmp.next = l1
else:
tmp.next = l2
return dummy.next


大同小异。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: