题解 | #牛牛的双链表求和#

牛牛的双链表求和

http://www.nowcoder.com/practice/efb8a1fe3d1f439691e326326f8f8c95

#include <stdio.h>
#include <stdlib.h>

typedef struct list{
    int data;
    struct list *next;
}list,*linklist;

//链表内容打印
void ptink(list *head)
{
        struct list *point=head;

        while(point!=NULL)
        {
                printf("%d ",point->data);
                point=point->next;//while里面的判断其实是在判断point->next是否为NULL
        }
        putchar('\n');
}

#if 1
//头插法 
list *headInsert(list *head1,int *arr1,int n)
{
    int i;
    list *headList = head1;
    list *arrList = NULL;
    for(i=n-1;i>=0;i--)
    {
        arrList = (list *)malloc(sizeof(list));
        arrList->data = arr1[i]; 
        arrList->next = headList;
        headList = arrList;
    }
    head1 = headList;
    return head1;

//尾插法 
list *trailInsert(list *head2,int *arr2,int n)
{
    int i;
    list *headList = head2;
    list *arrList = NULL;
    for(i=0;i<n;i++)
    {
        arrList = (list *)malloc(sizeof(list));
        arrList->data = arr2[i]; 
        arrList->next = NULL; //将headList放在arrList->next,即arrList的数据是放在headList的前面的 
        //headList=head;
        if(headList == NULL)
        {
            headList = arrList;  //
            head2 = headList;
        }
        else
        {
            while(headList->next != NULL)
            {
                headList = headList->next ;
            }
            headList->next = arrList;
        
    }
    return head2;

//求和链表 
list *Sum(list *head,list *head1,list *head2)
{
    list *List = NULL;  //每个节点存数的 
    list *list0 = head;  //临时头链表
    
    list *list1 = head1;
    list *list2 = head2; 
    
    while(list1 != NULL)
    {
        List = (list *)malloc(sizeof(list));
        List->data = (list1->data)+ (list2->data) ;
        List->next =NULL;
        //尾插法 
        if(list0 == NULL)
        {
            list0 = List;  //
            head = list0;
        }
        else
        {
            while(list0->next !=NULL)
            {
                list0 = list0->next;  //链表往后位移
            }
            list0->next = List;
        }
        list1 = list1->next;
        list2 = list2->next;
    }
    return head;
}
int main()
{
    int i,n;    
    scanf("%d",&n);
    int arr1[n];    
    int arr2[n];    
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr1[i]); 
    }
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr2[i]); 
    }
    
    list *head = NULL;
    list *head1 = NULL;
    list *head2 = NULL;
    
    head1 = headInsert(head1,arr1,n);
    //ptink(head1);
    head2 = trailInsert(head2,arr2,n);
    //ptink(head2);
    head = Sum( head, head1, head2);
    ptink(head);
    return 0;
}

#endif 
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务