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.
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
就当复习单链表呗
下面这个程序有内存泄漏,但是我不想改,因为没有头节点判断NULL实在是太烦了- -
/**
* 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) {
struct ListNode * res = NULL;
struct ListNode * p1 = l1; //p1 p2 分别用来跟踪 l1,l2; p3永远指向新的链表的最后一个元素
struct ListNode * p2 = l2;
struct ListNode * p3 = res;
while(p1 != NULL && p2 != NULL){
int x ;
if( p1->val < p2->val ){
x = p1->val;
p1 = p1->next;
}
else{
x = p2->val;
p2 = p2->next;
}
struct ListNode * temp = new ListNode(x); //新建一个节点
if(p3 == NULL){ //没有头节点就是很烦啊,各种NULL的判断
res = temp;
p3 = res;
}
else{
p3->next = temp;
p3 = p3->next;
}
}
//一个结束了另一个还没有结束
if(p1 == NULL && p2 != NULL){
if(p3 == NULL) //一个都没加进去- -
res = p2;
else
p3->next = p2;
}
else if(p1 != NULL && p2 == NULL){
if(p3 == NULL) //同样,一个都没加进去
res = p1;
else
p3->next = p1;
}
return res;
}
};