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

牛牛的双链表求和

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

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

typedef struct node{
    int data;
    struct node *next;
}node;
node *createlist()
{
    node *head = malloc(sizeof(node));
    if(head == NULL){
        printf("out of memory");
        exit(1);
    }
    head->next = NULL;
    return head;
}
void add_node(node *head, int n,int *q)
{
    //用尾插法实现
    node *p = head;
  
    for (int i =0; i < n; i++) {
    node *newnode = malloc(sizeof(node));//每循环一次都要创建一块内存空间,链表的内存空间不需要连续
    if (newnode == NULL) {
        printf("out of memory");
        exit(1);
    }
        newnode->data = q[i];   //但是所储存的数据一定是按数组元素的顺序连接起来的
        p->next = newnode;      //p的指针域指向新节点
        p = newnode;            //p指针向后移动指向当前最后一个节点
    }
  //全部添加完成,把最后一个节点的指针域置为空
    p->next = NULL;
}
    node *sum_node(node *head1,node *head2)
    {
       
        node *p = head1->next;
        node *q = head2->next;
        while(p != NULL)
        {
            q->data = (q->data) + (p->data);
            p = p->next;
            q = q->next;
        }
       return head2;
    }
int main() {
    int n;
    scanf("%d", &n);
    int arr1[n];
    int arr2[n];

    node *head1 = createlist();  //创建带头节点的空链表
    node *head2 = createlist();

    for (int i = 0; i < n; i++) {
        scanf("%d", &arr1[i]);   //填充数组元素
    }
    add_node(head1,n, &arr1[0]); //建立单链表head1,传入数组元素个数和数组起始位置,和链表指针
    for (int j = 0; j < n; j++) {
        scanf("%d", &arr2[j]);
    }
    add_node(head2,n, &arr2[0]);

    node *head3 = sum_node(head1,head2);  //两个链表合并,返回头指针
    node *p = head3->next;  //声明指针p指向链表第一个带数值的节点
    while(p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
    
    return 0;
}

全部评论

相关推荐

10-28 15:45
门头沟学院 C++
西南山:海康威视之前不是大规模裁员吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务