标签:
题目: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
大同小异。
leetcode-21-Merge Two Sorted Lists
标签:
原文地址:http://blog.csdn.net/summerdj/article/details/51365048