单链表的存储结构定义
typedef struct LNode {
ElemType data; // 数据域
struct LNode *next; // 指针域
} LNode, *LinkList;
C还是C++,
代码如下:
#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
我可以