/** * 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节点剩余部分插入