合并两个有序链表

来源:互联网 发布:网络机房存储设备 编辑:程序博客网 时间:2024/06/07 05:42
#include <stdio.h>#include <stdlib.h>struct list{    int data;    struct list *next;};typedef struct list L;L *insert (L *head, int data)//尾插{    L *new = calloc(1, sizeof(L));    new->data = data;    new->next = NULL;    if(head == NULL)        head = new;    else    {        L *tmp = head;        while(tmp->next != NULL)        {            tmp = tmp->next;        }        tmp->next = new;    }    return head;}L *mergeList(L *head1, L *head2)//合并{    L *merge = NULL;    L *node1 = head1;    L *node2 = head2;    //先找到新链表的头    if(head1 == NULL && head2 == NULL)        return merge;    else if (head1 == NULL && head2 != NULL)        return head2;    else if (head2 == NULL && head1 != NULL)        return head1;    else    {           if(head1->data >= head2->data)        {               merge = head2;            head2 = head2->next;        }           else        {               merge = head1;            head1 = head1->next;        }               }    L *tmp = merge;    //比较两个链表的首个节点 然后将data较小的节点插入到新链表中    //如果在比较当中某个链表已经遍历完,则直接将另个链表直接插入到新链表中    while(head1 != NULL || head2 != NULL)    {        if (head1 == NULL && head2 != NULL)        {            tmp->next = head2;            break;        }        else if(head2 == NULL && head1 != NULL)        {            tmp->next = head1;            break;        }        else        {            if (head1->data >= head2->data)            {                tmp->next = head2;                head2 = head2->next;            }            else            {                tmp->next = head1;                head1 = head1->next;            }        }        tmp = tmp->next;    }    return merge;}void travel(L *head){    L *node = head;    while(node!= NULL)    {        printf("data:%d\n", node->data);        node = node->next;    }    return;}int main(){    L *head1 = NULL;    L *head2 = NULL;    L *head3 =  NULL;    int i = 0;    for(i = 0; i < 10; i = i + 2)    {        head1 = insert(head1, i);    }    for(i = 1; i < 20; i = i + 2)    {        head2 = insert(head2, i);    }    travel(head1);    printf("\n");    travel(head2);    printf("\n");    head3 = mergeList(head1, head2);    travel(head3);    return 0;}

输出

data:0data:2data:4data:6data:8data:1data:3data:5data:7data:9data:11data:13data:15data:17data:19data:0data:1data:2data:3data:4data:5data:6data:7data:8data:9data:11data:13data:15data:17data:19