user-0 提问: C语言双链表插入过程指针不知道错在哪，求大神帮忙

回复:
user: user-0
content: 引用 10 楼 有恒？无恒？？的回复:int**这是二级指针  我没说这个错。   struct Doublelist* lLink, *rLink; 这个昨天我就改了，合着说你压根没看啊 （我一直以为你改完这一句了，不好意思，打扰了） byebye 我看了只不过我以为我那样写也没问题。之后网上百度才知道错了

user: user-1
content: int**这是二级指针  我没说这个错。   struct Doublelist* lLink, *rLink; 这个昨天我就改了，合着说你压根没看啊 （我一直以为你改完这一句了，不好意思，打扰了） byebye

user: user-1
content: 引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:[quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧

user: user-0
content: 引用 7 楼 有恒？无恒？？ 的回复:[quote=引用 6 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 5 楼 有恒？无恒？？的回复:][quote=引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧 [/quote] 。。。我把你的改成我的后你的能运行了，而我的却还是不能运行了。而且我的错误在那个r = r->lLink; 错误显示为不允许指针只想不完整的类类型。这啥意思啊？[/quote] 在typedef的时候，你创建了两个自定义类型Dnode,DLinklist DLinklist*这个类型是不存在的  DLinklist list就是Dnode *list（相当于int *） DLinklist *list 是 Dnode **list（相当于int**  ，这个根本不存在）//这个类型你没有定义  你的明白。 没有这个类型，你的形参就是有问题的，要么该形参，要么在typedef的时候加一个类型 [/quote]我知道了是我那个结构体定义时候定义指针域的时候用的是别名的所以错了 改成这样就好了struct Doublelist* lLink, *rLink;而我的是struct Dnode *；不信你改下。而且int**这是二级指针是存在的你可以分步运行试下。

user: user-0
content: 我把你的按我方式改了下你看下可以运行#include <iostream>  using namespace std; #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, * rLink; }Dnode, * DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist* list); Status insertDnode(DLinklist* list, int pos); int main() { 	creatlist(&list); 	printf("%d", list->sData); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist* list) { 	if (!((DLinklist)malloc(sizeof(struct Doublelist)))) 		return Error; 	else 	{ 		*list = (DLinklist)malloc(sizeof(struct Doublelist)); 		(*list)->lLink = (*list)->rLink = '\0'; 		cin >> (*list)->sData; 		length++; 		return OK; 	} } //int main() //{ // // // printf("%b", "我是谁"); // cout << ""<< endl; // return 0; //}   Status insertDnode(DLinklist* list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(struct Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = *list; 			DLinklist p = (DLinklist)malloc(sizeof(struct Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 				p->lLink = r; 				p->rLink = r->lLink; 				r->rLink->lLink = p; 				r->rLink = p; 			} 		} 	} }

user: user-0
content: 引用 2 楼 有恒？无恒？？的回复:#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在

user: user-0
content: 你这个不对，你可以在构造链表函数中将头结点数据赋值，然后再主函数打印你会发现打印不出来

user: user-1
content: 引用 6 楼 三鑫 galaxy S7 edge(5G)的回复:[quote=引用 5 楼 有恒？无恒？？的回复:][quote=引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧 [/quote] 。。。我把你的改成我的后你的能运行了，而我的却还是不能运行了。而且我的错误在那个r = r->lLink; 错误显示为不允许指针只想不完整的类类型。这啥意思啊？[/quote] 在typedef的时候，你创建了两个自定义类型Dnode,DLinklist DLinklist*这个类型是不存在的  DLinklist list就是Dnode *list（相当于int *） DLinklist *list 是 Dnode **list（相当于int**  ，这个根本不存在）//这个类型你没有定义  你的明白。 没有这个类型，你的形参就是有问题的，要么该形参，要么在typedef的时候加一个类型

user: user-0
content: 引用 5 楼 有恒？无恒？？的回复:[quote=引用 4 楼 三鑫 galaxy S7 edge(5G)的回复:][quote=引用 2 楼 有恒？无恒？？的回复:]#include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义 我之前的那个是将存放list变量的地址传给其它函数，如果你直接传list变量的话，那这个函数结束后回到主函数list会不存在[/quote] 我这个的确有问题，链表没有销毁， 我在vs2017上调试，能跑起来了 我的意思是，能运行了 你自己去做吧 [/quote] 。。。我把你的改成我的后你的能运行了，而我的却还是不能运行了。而且我的错误在那个r = r->lLink; 错误显示为不允许指针只想不完整的类类型。这啥意思啊？

user: user-1
content: #include <iostream>  using namespace std; #include<vector> #include<stdio.h> #define OK 1 #define Error -1 typedef  int Elemtype; typedef  int Status;   //Status insertDnode(Dnode* list, int position); typedef struct Doublelist { 	Elemtype sData; 	struct Doublelist* lLink, *rLink; }Dnode, *DLinklist; DLinklist list; static int length = 0; Status creatlist(DLinklist list); Status insertDnode(DLinklist list, int pos); int main() { 	creatlist(list); 	printf("%d", &list); 	free(list); 	list = 0; 	return 0; } //1.创建一个空的链表 Status creatlist(DLinklist list) { 	if (!((DLinklist)malloc(sizeof(Doublelist)))) 		return Error; 	else 	{ 		list = (DLinklist)malloc(sizeof(Doublelist)); 		list->lLink = list->rLink = '\0'; 		length++; 		return OK; 	} } //int main() //{ // //	 //	printf("%b", "我是谁"); //	cout << ""<< endl; //	return 0; //}   Status insertDnode(DLinklist list, int pos) { 	if (1 <= pos && pos <= length + 1) 	{ 		if (!((DLinklist)malloc(sizeof(Doublelist)))) 		{ 			return Error; 		} 		else 		{ 			DLinklist r = list; 			DLinklist p = (DLinklist)malloc(sizeof(Doublelist)); 			p->lLink = p->rLink = '\0'; 			if (pos != 1 && pos != 2) 			{ 				for (int i = 2; i < pos; i++) 				{ 					r = r->lLink; 				} 			} 		} 	} } DLinklist list就是Dnode *list DLinklist *list 是 Dnode **list//这个类型你没有定义

user: user-2
content: ennnnnnn，怎么这么多链表的题。