标签:
Merge two sorted linked lists and return it as a new list. The new listshould be made by splicing together the nodes of the first two lists.
HideTags
#pragma once #include<iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; //法1:头部添加冗余指针,正常merge ListNode *mergeTwoLists1(ListNode *l1, ListNode *l2) { ListNode* result = new ListNode(-1);//头部附加节点,应返回result->next ListNode* p = result; while (l1&&l2) { if (l1->val < l2->val) { p->next = new ListNode(l1->val);//注意不能写成是p=new。。。。 l1 = l1->next; } else { p->next = new ListNode(l2->val); l2 = l2->next; } p = p->next; } while (l1) { p->next= new ListNode(l1->val); l1 = l1->next; p = p->next; } while (l2) { p->next = new ListNode(l2->val); l2 = l2->next; p = p->next; } return result->next; } //法2:二级指针 ListNode *mergeTwoLists2(ListNode *l1, ListNode *l2) { ListNode *result; ListNode **pp = &result; while (l1&&l2) { if (l1->val < l2->val) { *pp = new ListNode(l1->val); l1 = l1->next; } else { *pp = new ListNode(l2->val); l2 = l2->next; } pp = &(*pp)->next; } while (l1) { *pp = new ListNode(l1->val); l1 = l1->next; pp = &(*pp)->next; } while (l2) { *pp = new ListNode(l2->val); l2 = l2->next; pp = &(*pp)->next; } return result; } void main() { ListNode* l1 = new ListNode(1); ListNode* l2 = new ListNode(2); ListNode* l3 = new ListNode(1); ListNode* l4 = new ListNode(1); ListNode* result = mergeTwoLists2(l2, l1); while (result) { cout << result->val << ' '; result = result->next; } cout << endl; system("pause"); }
21.Merge Two Sorted Lists(法1头部附加节点法2二级指针)
标签:
原文地址:http://blog.csdn.net/hgqqtql/article/details/43691695