本文共 1201 字,大约阅读时间需要 4 分钟。
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4因为两个链表是有序的,创建两个标记指针,一个指向l1链表,一个指向l2链表,比较两个的值,若l1指向的值小,p3就等于p1,指针后移,反之相同。当一个链表值被循环完后,另一个链表续在l3后
特殊情况: 若有一个链表为空,则l3直接等于另一个链表 因为每次都是续在p3的next上,故l3头结点没有值,返回时从l3的next返回struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ struct ListNode *l3 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode *p1 = l1; struct ListNode *p2 = l2; struct ListNode *p3 = l3; if(!p1) { l3 = l2; return l3; } if(!p2) { l3 = l1; return l3; } while(p1 && p2) { if(p1 -> val < p2 -> val) { p3 -> next = p1; p3 = p1; p1 = p1 -> next; } else { p3 -> next = p2; p3 = p2; p2 = p2 -> next; } } if(!p1) { for(struct ListNode *p = p3; p2 != NULL; ) { p -> next = p2; p2 = p2 -> next; p = p -> next; } } if(!p2) { for(struct ListNode *p = p3; p1 != NULL; ) { p -> next = p1; p1 = p1 -> next; p = p -> next; } } return l3 -> next;}
转载地址:http://swkti.baihongyu.com/