int ListLength(LinkNode *L)//计算给定一个由字符数组转化得到的单链表的长度 { /********BEGIN********/ /*********END*********/ }按照要求补充这个代码
时间: 2024-05-15 14:10:46 浏览: 70
这里提供一个计算单链表长度的代码实现:
```c++
int ListLength(LinkNode *L)
{
int len = 0;
LinkNode *p = L->next;
while (p != NULL) {
len++;
p = p->next;
}
return len;
}
```
其中,`LinkNode` 是单链表节点的结构体,包含一个数据域和一个指向下一个节点的指针域。`L` 是指向单链表头节点的指针,头节点不存储数据。
在代码实现中,我们用 `p` 来遍历单链表,每次遍历时将计数器 `len` 加一。当 `p` 指向 NULL(即链表尾部)时,遍历结束,返回计数器的值即可。
相关问题
int ListLength(SqList L) { /****在此下面完成代码***************/ return L.length; /***********************************/ }
引用:函数`CreateList(SqList *L,ElemType a[],int n)`中,如果去掉`&`,函数变为`void CreateList(SqList *L,ElemType a[],int n)`,意味着参数`L`不再是指针的引用,而是指针的值传递。这样做的话,在函数内部对`L`的修改不会影响到外部的指针。也就是说,无论在函数内部如何修改`L`的值,都不会改变外部指针的指向。因此,函数结束后,外部指针仍然指向原来的地址,不会指向新创建的顺序表。[^1]
引用:在函数参数`SqList *&L`中,`&`表示对`SqList`类型指针的引用。这样做的目的是为了在函数内部修改指针的指向,并将修改后的指针带回到函数外部。也就是说,通过引用传参,可以在函数内部创建新的顺序表,并将新创建的顺序表的地址赋给外部指针。这样,函数结束后,外部指针将指向新创建的顺序表。
下面是函数`int ListLength(SqList L)`的代码实现:
```c
int ListLength(SqList L)
{
return L.length;
}
```
这个函数的作用是返回顺序表的长度。由于参数`L`是按值传递,所以在函数内部对`L`的修改不会影响到外部的顺序表。函数直接返回顺序表的长度即可。
用单链表存储线性表,写出在带头结点的单链表中插入数据元素e作为单链表的第i个元素的算法和求单链表长度ListLength()的算法。 Typedef struct Lnode { ElemType data; //数据域 struct Lnode *next; //指针域 }Lnode, *LinkList; bool ListInsert(LinkList &L, int i, ElemType e){ int ListLength( LinkList L ){
插入数据元素e作为单链表的第i个元素的算法:
```
bool ListInsert(LinkList &L, int i, ElemType e){
if(i < 1){ //i小于1无意义
return false;
}
Lnode *p = L; //p指向头结点
int j = 0; //j表示当前p指向的结点是第几个结点
while(p && j < i - 1){ //查找第i-1个结点
p = p->next;
j++;
}
if(!p){ //i大于表长加1,插入无效
return false;
}
Lnode *s = new Lnode; //新建结点s
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
```
求单链表长度ListLength()的算法:
```
int ListLength(LinkList L){
int len = 0;
Lnode *p = L->next; //p指向第一个结点
while(p){ //遍历单链表
len++;
p = p->next;
}
return len;
}
```
阅读全文