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.
题意:合并两个已排序的链表
题不难,但是有很多需要注意的细节,直接贴代码
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { 9 struct ListNode *tmp,*p1,*p2; 10 if(l1==NULL){ 11 tmp=l1; 12 l1=l2; 13 l2=tmp; 14 } 15 if(l1==NULL) 16 return l1; 17 p1=l1; 18 p2=l2; 19 while(l1!=NULL){ 20 if(l2!=NULL&&l1->val<=l2->val){ 21 while(l1->next!=NULL&&l1->next->val<=l2->val) 22 l1=l1->next; 23 tmp=l2; 24 l2=l2->next; 25 tmp->next=l1->next; 26 l1->next=tmp; 27 l1=l1->next; 28 } 29 else if(l2!=NULL&&l1->val>l2->val){ 30 tmp=l1; 31 l1=l2; 32 l2=tmp; 33 p1=l1; 34 } 35 else if(l2==NULL) 36 return p1; 37 } 38 return p1; 39 }
感觉写的好乱,重新写一遍:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { 9 struct ListNode *tmp,*p1; 10 if(l1==NULL&&l2==NULL) 11 return NULL; 12 if(l1==NULL) 13 return l2; 14 if(l2==NULL) 15 return l1; 16 if(l1->val>l2->val){ 17 tmp=l1; 18 l1=l2; 19 l2=tmp; 20 } 21 p1=l1; 22 while(l1!=NULL){ 23 if(l2!=NULL&&l1->val<=l2->val){ 24 while(l1->next!=NULL&&l1->next->val<=l2->val) 25 l1=l1->next; 26 tmp=l2; 27 l2=l2->next; 28 tmp->next=l1->next; 29 l1->next=tmp; 30 } 31 else if(l2==NULL) 32 return p1; 33 } 34 return p1; 35 }