用单链表存储线性表,写出在带头结点的单链表中插入数据元素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 ){
时间: 2024-02-22 11:58:00 浏览: 60
好的,我明白了。以下是您提出的问题的答案:
插入数据元素e作为单链表的第i个元素的算法:
1. 首先,需要判断i的合法性,如果i<=0或者i>链表长度+1,则插入位置不合法,返回false。
2. 创建一个新节点s,并将e赋值给s的data域。
3. 找到第i-1个节点p,将s的next指向p的next节点。
4. 将p的next指向s节点。
5. 返回true表示插入成功。
具体实现如下:
```
bool ListInsert(LinkList &L, int i, ElemType e){
//判断插入位置是否合法
if(i<=0 || i>ListLength(L)+1){
return false;
}
//创建新节点s
Lnode *s = new Lnode;
s->data = e;
//找到第i-1个节点p
Lnode *p = L;
for(int j=1; j<i; j++){
p = p->next;
}
//插入节点s
s->next = p->next;
p->next = s;
//插入成功,返回true
return true;
}
```
求单链表长度ListLength()的算法:
遍历链表,统计节点个数即可。
具体实现如下:
```
int ListLength(LinkList L){
int count = 0;
Lnode *p = L->next;
while(p){
count++;
p = p->next;
}
return count;
}
```
阅读全文