- 32
- 0
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
LinkList InitList(int n);//建链表
void ListDelete(LinkList q,LinkList p);//删除元素
void LocateElem(LinkList head, int k, LinkList p);//遍历链表
void ShowLnode(LinkList head);//展示链表
int main()
{
int n,m;
LinkList head, p;
scanf("%d", &m);
while(m--){
scanf("%d", &n);
head=InitList(n);
p=head->next;
while(p!=NULL){
LocateElem(head,p->data,p);
p=p->next;
}
ShowLnode(head);
}
return 0;
}
LinkList InitList(int n){
LinkList head, p, tail;
int m;
head=(LinkList)malloc(sizeof(Lnode));
head->next=NULL;
tail=head;
while(n--){
p=(LinkList)malloc(sizeof(Lnode));
scanf("%d", &m);
p->next=tail->next;
tail->next=p;
tail=p;
p->data=m;
}
return head;
}
void LocateElem(LinkList head, int k,LinkList p){
LinkList q,m;
m=p;
q=p;
p=p->next;
while(p!=NULL){
if(p->data==k){
//问题出在这里,这里这样写是没问题的,
//但是如果写成ListDelete(q,p)程序就运行不了
q->next=p->next;
free(p);
p=q->next;
}
else{
q=p;
p=p->next;
}
}
p=m;
}
void ShowLnode(LinkList head){
LinkList p;
p=head->next;
while(p!=NULL){
if(p->next==NULL){
printf("%d\n", p->data);
}
else{
printf("%d ",p->data);
}
p=p->next;
}
}
void ListDelete(LinkList q,LinkList p){
q->next=p->next;
free(p);
p=q->next;
}
这我传的确实是地址,但貌似不能在原来的链表进行修改?
我在网上查的是把ListDelte改成这样:
void ListDelete(LinkList *q,LinkList *p){
(*q)->next=(*p)->next;
free(*p);
(*p)=(*q)->next;
}
然后直接ListDelete(&p,&q)就可以了。
但是我头指针也是直接传的啊(LocateElem(Linklist head...)) 在这里删元素确实也把主函数里的链表给修改了啊,这是为啥啊
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
濃抹又重彩讓人無奈丶 普通会员 1楼
在C++中,我们通常会将结构体指针作为函数形参。这主要是因为结构体指针是一种特殊类型的指针,它可以指向结构体变量的地址,而不是指针变量本身。
当你创建一个结构体指针时,你需要为它分配内存空间,这个内存空间的大小等于结构体的大小。然后,你可以使用这个结构体指针来指向结构体变量的地址。
例如:
```cpp struct Animal { std::string name; int age; };
int main() { Animal animal("Tom", 10); Animal* ptr = &animal; std::cout << "Animal's name: " << ptr->name << std::endl; std::cout << "Animal's age: " << ptr->age << std::endl; return 0; } ```
在这个例子中,我们创建了一个名为Animal的结构体,并为其分配了一个名为animal的变量的内存空间。然后,我们使用结构体指针ptr来指向这个变量的地址,我们可以使用ptr来访问Animal结构体的变量。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
