/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
//int* nums = (int*)malloc(sizeof(int) * (m + n));
struct ListNode* p1 = pHead1, *p2 = pHead2, *mid1,*mid2, *pe1, *pe2,*end;
pe1 = (struct ListNode*)malloc(sizeof(struct ListNode));
pe2 = (struct ListNode*)malloc(sizeof(struct ListNode));
pe1->next = pHead1;
pe2->next = pHead2;
for (int i = 0; p1 != NULL && p2 != NULL; i++) {
mid1 = p1->next;
mid2=p2->next;
if (p1->val <= p2->val&&p1->next!=NULL) { //p2的值更大
p1=p1->next;
pe1=pe1->next;
}else if(p1->val <= p2->val&&p1->next==NULL){
p1->next=p2;
break;
} //else if(p1->val > p2->val&&p1->next==NULL) {
else{
pe2->next=mid2;
pe1->next=p2;
p2->next=p1;
p2=mid2;
pe1=pe1->next;
if(p1==pHead1)
pHead1=pe1;
}
}
return pHead1;
}
注意事项:
1.如果P2中的节点插到了P1头结点前面,则需要修改PHead1
2.P1指向最后一个节点时,不能直接把P2节点剩余部分插入

京公网安备 11010502036488号