您的位置:首页 > 其它

[LeetCode]Merge Two Sorted Lists

2015-07-12 12:38 302 查看
向一个新的链表中不断的插入元素

ListNode *Head =NULL;

ListNode *p=NULL;

ListNode *p2 = new ListNode(tmp);

if(Head==NULL)

Head= p2;

else

p->next = p2;

p = p2;

注意有链表为空的情况

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *head=NULL;
struct ListNode *p;
if(l1==NULL)    return l2;
if(l2==NULL)    return l1;
while(l1!=NULL||l2!=NULL){
int tmp;
if(l1!=NULL&&l2!=NULL){
if(l1->val<l2->val){
tmp = l1->val;
l1 = l1->next;
}
else{
tmp = l2->val;
l2 = l2->next;
}
}
else if(l1==NULL){
tmp = l2->val;
l2 = l2->next;
}
else{
tmp = l1->val;
l1 = l1->next;
}
struct ListNode *p2 = (struct ListNode*) malloc(sizeof(struct ListNode));
p2->val = tmp;
if(head == NULL){
head = p2;
// p = p2;
}
else
p->next = p2;
p = p2;
}
p->next = NULL;
return head;

}


使用ListNode **p

class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
ListNode *header = NULL, **p;
for (p = &header; l1 && l2; p = &(*p)->next)
{
if (l1->val <= l2->val)
{
*p = new ListNode(l1->val);
l1 = l1->next;
}
else
{
*p = new ListNode(l2->val);
l2 = l2->next;
}
}
for (ListNode *leave = l1 ? l1 : l2; leave; leave = leave->next, p = &(*p)->next)
*p = new ListNode(leave->val);
return header;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: