📜  单向链表节点的乘积(1)

📅  最后修改于: 2023-12-03 15:22:49.261000             🧑  作者: Mango

单向链表节点的乘积

单向链表(Singly Linked List)是一种常用的数据结构,由多个节点(Node)组成,每个节点存储一个元素和指向下一个节点的指针。在链表中,每个节点只记录其后继节点的地址,因此,访问链表中的某个元素需要从链表的头节点开始遍历整个链表,直到找到目标元素。

本篇文章将介绍使用单向链表来存储一组数值,计算节点的乘积。

实现思路

我们可以使用以下步骤来实现计算节点的乘积:

  1. 定义链表节点的结构体,包括数据域和指针域。
  2. 在主函数中定义一个头节点,初始化为空。
  3. 以用户输入的方式向链表中添加节点。
  4. 遍历链表,依次计算节点的乘积。
  5. 输出节点的乘积。
代码实现
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    int data;
    struct node *next;
}Node, *List;
//定义链表节点的结构体,并将其定义为指向结构体的指针类型
void initList(List *head)
{
    *head=(Node*)malloc(sizeof(Node));//开辟一个头节点的空间
    (*head)->next=NULL;//头节点指针域为空
}
//初始化链表函数
void add(List head, int x)
{
    List p=head;
    if(head)
    {
        List newnode=(Node*)malloc(sizeof(Node));//为新节点开辟空间
        newnode->data=x;//为新节点的数据域赋值
        newnode->next=NULL;//新节点指针域为空
        
        while(p->next)
        {
            p=p->next;//查找尾节点
        }
        p->next=newnode;//将新节点挂在尾节点的指针域上
    }
}
//在链表尾添加元素函数
void printList(List head)
{
    List p=head->next;
    while(p)
    {
        printf("%d ", p->data);
        p=p->next;
    }
}
//遍历链表,输出节点的内容函数
int mulList(List head)
{
    List p=head->next;
    int product=1;
    while(p)
    {
        product*=p->data;//计算每个节点的乘积
        p=p->next;
    }
    return product;
}
//计算链表所有节点的乘积函数
int main()
{
    List head;
    initList(&head);
    //初始化链表
    int i,n,x;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&x);
        add(head, x);//添加元素到链表尾部
    }
    printf("The linked list:\n");
    printList(head);//遍历链表,输出节点内容
    printf("\n");
    int product=mulList(head);//计算链表所有节点的乘积
    printf("The product of linked list nodes is %d.\n",product);//输出节点的乘积
    return 0;
}
程序输出

假设用户输入如下数据:

5
1 2 3 4 5

程序输出如下:

The linked list:
1 2 3 4 5 
The product of linked list nodes is 120.
总结

本文介绍了使用单向链表来存储一组数值,并计算节点的乘积的方法。使用单向链表存储数据可以方便地进行插入、删除等操作。本文实现的方法比较简单,可以根据实际需求来选择更加复杂的算法。