思路很简单,请听我娓娓道来。
建立一个新链表,然后遍历两个链表,每次遍历记录下符合条件的,并且加入到新链表中。最后把没有遍历完的接到新链表上。
struct ListNode *mergelists(struct ListNode *list1,struct ListNode *list2)
{
if (list1 == NULL) // 先处理一下某个为空的特殊情况
return list2;
if (list2 == NULL)
return list1;
struct ListNode *p, *head=NULL, *tail; // p代表要加到新链表里的结点
while (list1 != NULL && list2 != NULL){
p=(struct ListNode *)malloc(sizeof(struct ListNode));
// 找到最小值的结点 p
if (list1->data < list2->data){
p->data = list1->data;
p->next = NULL;
list1 = list1->next; // 结点已给 p,list1指向下一个
}
else{
p->data = list2->data;
p->next = NULL;
list2 = list2->next; // 同上
}
// 把找到的结点加到新链表中
if (head == NULL) // 第一个结点
head = p;
else
tail->next = p;
tail = p; // 最后一个结点
}
// 把没遍历完的补到新链表后面
if (list1 == NULL)
tail->next = list2;
else
tail->next = list1;
return head;
}