赞
踩
思路很简单,请听我娓娓道来。
建立一个新链表,然后遍历两个链表,每次遍历记录下符合条件的,并且加入到新链表中。最后把没有遍历完的接到新链表上。
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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。