//不清除重复变量
/** * struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
struct ListNode *first1 = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *first2 = (struct ListNode*)malloc(sizeof(struct ListNode));
first1->next = pHead1;
first2->next = pHead2;
struct ListNode *p,*q;
if(pHead1 == NULL || pHead2==NULL){
if(pHead1 != NULL)
return pHead1;
if(pHead2 != NULL)
return pHead2;
return pHead1;
}
if(pHead1->val < pHead2->val){
p=pHead1;q=pHead2;
first1->next = pHead2;
first2->next = pHead1;
}
else{
p=pHead2;q=pHead1;
first1->next = pHead1;
first2->next = pHead2;
}
while(p->next!=NULL && first1->next!=NULL){
if(p->val <= q->val && p->next->val > q->val){
first1->next = q->next;
q->next = p->next;
p->next = q;
p=q;
if(first1->next != NULL){
q=first1->next;
}
}
else if(p->next->val <= q->val){
p=p->next;
}
else{
break;
}
}
if(first1->next!=NULL){
p->next=q;
}
p=first2->next;
free(first2);
return p;
}