合并两个排好序的单向链表

来源:互联网 发布:lv为什么那么贵 知乎 编辑:程序博客网 时间:2024/04/29 07:53
Node* mergeLists(Node *a, Node *b){if (a == NULL){return b;}if (b == NULL){return a;}Node *head = NULL;if (a->value < b->value){head = a;a = a->next;}else{head = b;b = b->next;}Node *prev = head;while (a && b){if (a->value < b->value){prev->next = a;prev = a;a = a->next;}else{prev->next = b;prev = b;b = b->next;}}if (a){prev->next = b;}else{prev->next = a;}return head;}


更进一步:合并两个已经排序的单链表为一个排序的单链表,相同内容只保留一个
如:单链表a:1->2->3->4
单链表b:3->4->5
输出:1->2->3->4->5

Node* removeDuplicateNodes(Node *a){    if (a == NULL){return NULL;}Node *head = a;Node *p = a->next;Node *prev = a;while (p != NULL){if (p->value == prev->value){prev->next = p->next;delete p;}else{p = p->next;prev = p;}}return head;}Node* mergeLists(Node *a, Node *b){if (NULL == a){return removeDuplicateNodes(b);}if (NULL == b){return removeDuplicateNodes(a);}    Node *head = NULL;Node *prev = NULL;if (a->value < b->value){head = a;        a = a->next;}else{head = b;b = b->next;}    prev = head;while (a != NULL && b != NULL){if (a->value < b->value){            if (a->value == prev->value){Node *temp = a;a = a->next;                delete temp;}else{prev->next = a;a = a->next;prev = prev->next;}}else{if (b->value == prev->value){Node *temp = b;b = b->next;delete temp;}else{prev->next = b;b = b->next;prev = prev->next;}}}if (a == NULL){prev->next = removeDuplicateNodes(b);}else{prev->next = removeDuplicateNodes(a);}return head;}


原创粉丝点击