【20年扬大真题】
试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
#include<malloc.h>
//单链表定义
//链表结点
int A[10] = { 1,2,3,4,5,6,7,8,9,10 };
typedef struct {//定义单链表结点类型
int data;//数据域
struct LNode *next;//指针域
}LNode, *LinkList;
//带头结点初始化-尾插法
void InitList2(LinkList* L) {
(*L) = (LNode*)malloc(sizeof(LNode));
(*L)->next = NULL;
LNode* rear = (*L);//标记表尾
int i = 0;
for (i = 0;i < 10;i++) {
LNode* p = (LNode*)malloc(sizeof(LNode));//创建一个新结点
p->data = A[i];//新结点赋值
rear->next = p;//接到L上
rear = p;//标记表尾
}
rear->next = NULL;
}
int LENGTH(LinkList L) {
int i = 0;
LNode* p = L->next;
while (p != NULL) {
i++;
p = p->next;
}
return i;
}
int main()
{
LinkList L;
InitList2(&L);//初始化一个带头结点的1,2,3,4,5,6,7,8,9,10的单链表
int length = LENGTH(L);
printf("%d", length);
return 0;
}