编写一代码在带头结点的单链表结构上实现求线性表的长度

单链表的存储结构定义
typedef struct LNode {
ElemType data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList;

C还是C++,

img

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
    ElemType data; // 数据域
    struct LNode* next; // 指针域
} LNode, * LinkList;
//1初始化链表
LinkList InitLink(LinkList h)
{
    h = (LinkList)malloc(sizeof(LNode));
    h->next = NULL;
    return h;
}

//2尾插法
LinkList InsertLinkTail(LinkList h, ElemType e)
{
    LinkList p = h->next;
    LinkList t = (LinkList)malloc(sizeof(LNode));
    t->data = e;
    t->next = NULL;
    if (p == NULL)
        h->next = t;
    else
    {
        while (p->next)
        {
            p = p->next;
        }
        p->next = t;
    }
    return h;
}
//3显示链表
void showList(LinkList h)
{
    LinkList p = h->next;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

//5.链表的长度
int Length(LinkList h)
{
    LinkList p = h->next;
    int len = 0;
    while (p)
    {
        len++;
        p = p->next;
    }
    return len;
}

int main()
{
    LinkList h = 0;
    int data;
    char ch;
    int zm[] = { 1,2,3,4,5,6 };

    //初始化单链表h
    h = InitLink(h);
    //尾插法插入
    printf("请输入链表中的数,以回车结束:");
    while (1)
    {
        scanf("%d", &data);
        h = InsertLinkTail(h, data);
        ch = getchar();
        if (ch == '\n')
            break;
    }
        
    //输出单链表
    showList(h);
    

    printf("链表长度:%d\n", Length(h));
    
    return 0;

}

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

typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode, *LinkList;


LinkList creat()
{//使用尾插法建表;
    LinkList L;
    L = (LinkList)malloc(sizeof(LNode));
    if(!L)   printf("memory malloc error!\n");
    LinkList p = L;
    ElemType a;
    int len;
    
    printf("请输入待建表的表长:");
    scanf("%d", &len);
    for(int i=0; i<len; i++)
    {   
        printf("请输入第%d个元素的值:", i+1);
        scanf("%d", &a);
        p->next = (LinkList)malloc(sizeof(LNode));
        p->next->data = a;
        p = p->next;
    }
    
    p->next = NULL;
    
    return L;
}

void print(LinkList L)
{
    LinkList p = L->next;
    while(p != NULL)
    {
        printf("%d\n", p->data);
        p = p->next;
    }
}

LinkList LOCATE(LinkList L, ElemType X)
{
    if(L == NULL)    return NULL;
    else
    {
        LinkList p = L->next;
        while(p)
        {
            if(p->data == X)
                return p;
            else
                p = p->next;
        }
    }
}

void main()
{
    LinkList L = creat();
    int x;
    printf("请输入待查找的元素值:");
    scanf("%d", &x);
    LinkList p = LOCATE(L, x);
    if(p)
        printf("%d", *p);
    else
        printf("查找失败!");
}

望采纳

假设您的单链表的头结点名称为 head,那么可以使用以下代码来求出单链表的长度:

int getListLength(LinkList head) {
  int length = 0;
  LNode *p = head;
  while (p != NULL) {
    length++;
    p = p->next;
  }
  return length;
}

上述代码中,我们定义了一个指针变量 p 来遍历单链表,每遍历一个节点就将计数器 length 加一,最后返回计数器的值即为单链表的长度。

int getLength(LinkList L) {
  if (L == NULL) {
    return 0; // 递归基:空链表的长度为 0
  } else {
    return 1 + getLength(L->next); // 递归求解
  }
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
    ElemType data; // 数据域
    struct LNode* next; // 指针域
} LNode, * LinkList;
//1初始化链表
LinkList InitLink(LinkList h)
{
    h = (LinkList)malloc(sizeof(LNode));
    h->next = NULL;
    return h;
}
//2尾插法
LinkList InsertLinkTail(LinkList h, ElemType e)
{
    LinkList p = h->next;
    LinkList t = (LinkList)malloc(sizeof(LNode));
    t->data = e;
    t->next = NULL;
    if (p == NULL)
        h->next = t;
    else
    {
        while (p->next)
        {
            p = p->next;
        }
        p->next = t;
    }
    return h;
}
//3显示链表
void showList(LinkList h)
{
    LinkList p = h->next;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
//5.链表的长度
int Length(LinkList h)
{
    LinkList p = h->next;
    int len = 0;
    while (p)
    {
        len++;
        p = p->next;
    }
    return len;
}
int main()
{
    LinkList h = 0;
    int data;
    char ch;
    int zm[] = { 1,2,3,4,5,6 };
    //初始化单链表h
    h = InitLink(h);
    //尾插法插入
    printf("请输入链表中的数,以回车结束:");
    while (1)
    {
        scanf("%d", &data);
        h = InsertLinkTail(h, data);
        ch = getchar();
        if (ch == '\n')
            break;
    }
    //输出单链表
    showList(h);
    printf("链表长度:%d\n", Length(h));
    return 0;
}

用c语言实现计算单链表长度,链表的各种题目整理(
这有各种形式的,可以借鉴下
https://blog.csdn.net/weixin_35363322/article/details/117178719

我可以