求单链表的长度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求单链表的长度相关的知识,希望对你有一定的参考价值。
求带头结点的单链表的长度,并将长度保存到结点中。谢谢高手!小妹急用…
struct nodeint data;
struct node *next;
;
创建单链表后,最后一个结点的next是NULL,据此来遍历表,获得长度。
void get_len( struct node *head )
struct node *p=head->next ;
int len=0;
while ( p )
len++;
p=p->next;
head->data=len ; //存储长度到头结点
追问
那个中文是什么意思?创建单链表后,最后一个结点的next是NULL,据此来遍历表,获得长度。
这个程序就这么短?
呵呵,我的意思是你先要建立起链表来之后,用这个代码就可以得到链表的长度。
你不会链表一点都不清楚吧?
我真的都不懂。。。
能给个最完整的吗?
//定义一个结点结构
struct node
int data; //数据,可以是任何复杂类型数据
struct node *next; //结点间连接的指针,用来指向下一个结点,通过next可以找到下一个结点,为NULL时,表示到了表尾
;
void creat_link ( struct node *h , int n )
struct node *tail=h , *p=NULL ;
int i;
for( i=0;idata=i+1 ;
//将新结点追加到表尾,即当前表尾的next指向p
tail->next=p;
//将p置为当前尾结点
tail=p;
tail->next=NULL; //表尾标志
void free_link ( struct node *h )
struct node *p ;
while ( h )
p=h ; //记下要释放的结点
h=h->next ; //表头指针指向下一个结点
free(p);//释放当前结点
void output ( struct node *h )
struct node *p=h->next ; //p指向第一个数据结点
while ( p )
printf("data=%d\n" , p->data ); //输出结点数据
p=p->next ; //数据指针指向下一个结点
void get_len( struct node *head )
struct node *p=head->next ;
int len=0;
while ( p )
len++;
p=p->next;
head->data=len ; //存储长度到头结点
//创建一个带表头结点的链表
int main()
struct node *head=NULL ;
int num=3; //数据结点个数
head=(struct node *)malloc( sizeof(struct node) ); //创建一个表头结点
creat_link( head , num ); //创建一个链表,包括三个数据结点
output( head ); //遍历链表
free_link( head ); //释放链表
return 0;
好好学习,有问题再追问,慢慢来,祝你进步
LinkList p=H; //p指向头结点
int j=0; //结点计数器j归零
while (p->next!=NULL) //当p结点的后继结点存在
j++; //计数器+1
p=p->next; //指针后移
return j;
参考技术B 你好!
我给你简单写了个程序,
其中链表的长度保存在头结点中
希望能满足你的要求
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct Node
int data;
struct Node * pNext;
NODE,* PNODE;
PNODE create_list(void);//创建一个链表
void traverse_list(PNODE pHead);//遍历链表
int length_list(PNODE pHead);//求链表的长度
int length_list(PNODE pHead);//获取链表长度
int main(void)
PNODE pHead = NULL;
printf("创建链表:\n");
pHead = create_list();
printf("遍历链表:\n");
traverse_list(pHead);
int length = length_list(pHead);
printf("所创建的链表的长度是%d\n", length);
return 0;
PNODE create_list(void)
int len;//链表中节点数目
int i;
int val;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead)
printf("分配内存失败!程序终止!");
exit(-1);
PNODE pTail = pHead;
pTail->pNext = NULL;
printf("请输入要创建的链表中节点的个数len=");
scanf("%d",&len);
for (i=0;i<len;++i)
printf("请输入第%d个节点的有效数据:",i+1);
scanf("%d",&val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
printf("分配内存失败!程序终止!");
exit(-1);
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
return pHead;
void traverse_list(PNODE pHead)
PNODE p = pHead->pNext ;
while (NULL != p)
printf("%10d",p->data);
p = p->pNext;
printf("\n");
return ;
int length_list(PNODE pHead)//求链表的长度
int len = 0;
PNODE p = pHead->pNext ;
while (NULL != p)
++len;
p = p->pNext ;
pHead->data = len;
return pHead->data; //将求得到链表的长度保存到头结点中
/*
在vc++6.0中的输出结果:
-----------
创建链表:
请输入要创建的链表中节点的个数len=5
请输入第1个节点的有效数据:1
请输入第2个节点的有效数据:2
请输入第3个节点的有效数据:3
请输入第4个节点的有效数据:4
请输入第5个节点的有效数据:5
遍历链表:
1 2 3 4 5
所创建的链表的长度是5
-----------------
*/
仅供参考!呵呵
4-3 求链式表的表长 (10分)
本题要求实现一个函数,求链式表的表长。
函数接口定义:
int Length( List L );
其中List
结构定义如下:
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode List;
L
是给定单链表,函数Length
要返回链式表的长度。
裁判测试程序样例:
#include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode List; List Read(); /* 细节在此不表 */ int Length( List L ); int main() { List L = Read(); printf("%d\n", Length(L)); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
1 3 4 5 2 -1
输出样例:
5
代码展示:
1 List Read() 2 { 3 PtrToLNode head = NULL; 4 PtrToLNode list = NULL; 5 int data; 6 scanf("%d",&data); 7 if(data!=-1) 8 { 9 head = (PtrToLNode)malloc(sizeof(struct LNode)); 10 head->Data = data; 11 head->Next = NULL; 12 list=head; 13 } 14 scanf("%d",&data); 15 while(data!=-1) 16 { 17 PtrToLNode node = NULL; 18 node = (PtrToLNode)malloc(sizeof(struct LNode)); 19 node->Data = data; 20 node->Next = NULL; 21 list->Next = node; 22 list = node; 23 scanf("%d",&data); 24 } 25 return head; 26 } 27 int Length( List L ) 28 { 29 int len= 0; 30 while(L) 31 { 32 len++; 33 L = L->Next; 34 } 35 return len; 36 }
以上是关于求单链表的长度的主要内容,如果未能解决你的问题,请参考以下文章