单链表的删除函数,为什么读入的是LinkList &L,而不是LinkList L
时间: 2024-04-18 10:32:02 浏览: 95
在C++中,函数参数可以有两种传递方式:值传递和引用传递。当我们需要在函数中修改传入的参数时,我们通常使用引用传递。
对于链表的删除操作,我们需要修改链表的结构,所以需要使用引用传递。当我们将链表作为参数传递给函数时,如果使用值传递,函数会创建链表的一个副本,对副本进行操作,并不会影响到原始链表。而使用引用传递,函数可以直接对原始链表进行修改。
所以,在单链表的删除函数中,参数使用LinkList &L的形式,表示传入的是原始链表的引用,可以在函数中直接对原始链表进行删除操作。如果使用LinkList L,即值传递的方式,对L的修改不会影响到原始链表。
相关问题
创建单链表linklist list_Headinsert(linklist &L)为什么形参是这个
形参linklist &L是引用类型,用于修改传入的链表L。在函数内部,我们可能需要改变链表的头部指针,以便在链表的头部插入新节点。如果我们不使用引用类型,而是使用指针类型linklist L,那么在函数内部对L进行修改后,实际上只是修改了L的副本,不会影响到原来的链表。而使用引用类型可以直接修改原来的链表。
根据提示,在右侧编辑器 Begin-End 区间补充代码,完成单链表的初始化操作,遍历操作及插入操作三个子函数的定义,具体要求如下: void InitList(LinkList &L);//构造一个空的单链表L int ListInsert(LinkList &L,int i,ElemType e) ;//在单链表L中第i个位置之前插入新的数据元素 void ListTraverse(LinkList L,void(*vi)(ElemType));// 依次调用函数vi()输出单链表L的每个数据元素
* L); // 初始化单链表
void TraverseList(LinkList L); // 遍历单链表
void InsertList(LinkList* L, int pos, int val); // 在单链表的指定位置插入元素
以下是代码:
// 单链表结构体
typedef struct Node {
int val;
struct Node* next;
}Node, * LinkList;
void InitList(LinkList* L) {
// 创建头节点
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
void TraverseList(LinkList L) {
// 从头节点开始遍历
LinkList p = L->next;
while (p) {
printf("%d ", p->val);
p = p->next;
}
}
void InsertList(LinkList* L, int pos, int val) {
// 创建新节点
LinkList newNode = (LinkList)malloc(sizeof(Node));
newNode->val = val;
newNode->next = NULL;
// 找到插入位置的前一个节点
LinkList pre = *L;
for (int i = 1; i < pos; i++) {
pre = pre->next;
if (pre == NULL) {
printf("插入位置不合法\n");
return;
}
}
// 插入新节点
newNode->next = pre->next;
pre->next = newNode;
}
阅读全文