user-0 提问: C语言创建链表失败

回复:
user: user-1
content: 你这个很多错误。 有好多处编译错误。 还有逻辑错误，比如out_N函数里，应该是Node *P = L;才对，你L=P，然后遍历P？？ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。   #include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> typedef int Elemtype; typedef struct Node { 	Elemtype data; 	struct Node *next; }Node; Node *a; int i = 0; Node *creat_N(); void out_N(Node *L); void insert_N(Node *L, Elemtype e, int j); Elemtype delete_N(Node *L, Elemtype e, int j); int locat_N(Node *L, Elemtype e);  void main() { 	int j, k, loc; 	Elemtype e, x; char ch; 	do{ 		printf("\n"); 		printf("\n  1.创建链表"); 		printf("\n  2.输出链表"); 		printf("\n  3.在j位置插入元素"); 		printf("\n  4.删除第j个元素，并返回其值"); 		printf("\n  5.查找值为e的元素"); 		printf("\n  6.结束程序运行"); 		printf("\n======================================"); 		printf("\n    请输入您的选择（1，2，3，4，5，6）"); 		scanf("%d", &k); 		switch (k) 		{ 		case 1:{ creat_N(); out_N(a); }break; 		case 2:{out_N(a); 		} break; 		case 3:{ printf("\n j,e=?"); scanf("%d %d", &j, &e); 			insert_N(a, e, j);   out_N(a); 		} break; 		case 4:{ printf("\n j=?");  scanf("%d", &j); 			x = delete_N(a, e, j); printf("\n返回的值 x=%d", x); 			out_N(a); 		} break; 		case 5:{ printf("\n e=?"); scanf("%d", &e); 			loc = locat_N(a, e); 			if (loc == -1) printf("\n 未找到 %d", loc); 			else printf("\n 已找到，元素位置是 %d", loc); 		} break; 		} 	} while (k != 6); 	printf("\n               再见！"); 	printf("\n          打回车键，返回。"); ch = getch(); } Node *creat_N() { 	Node *L, *P, *S;  Elemtype x; 	L = (Node *)malloc(sizeof(Node));                  /* 分配头结点 */ 	L->next = NULL; 	P = L; 	printf("\n  data=?");  scanf("%d", &x);     /*  输入第一个数据元素 */ 	while (x != -111)                            /*  输入-111，结束循环 */ 	{ 		S = (Node *)malloc(sizeof(Node));             /*  分配新结点 */ 		S->data = x;  S->next = NULL; 		P->next = S;  P = S; 		i++; 		printf("data=?( -111 end) "); scanf("%d", &x); /* 输入下一个数据*/ 	}L->data = i; 	return(L); } void out_N(Node *L) { 	int m = 0; 	Node *P = L; 	//L = P; 	for (m; m<i; m++) 	{ 		printf("%d", P->data); 		P = P->next; 	} } void insert_N(Node *L, Elemtype e, int j) { 	char ch; 	if (i>i + 1 && j < 0) 		printf("overflow"); 	if (i == 0) 		printf("空表"); 	Node *P; 	P = L; 	if (j <= i + 1) 	{ 		for (int m = 0; m < j; m++) 			P = P->next; 		Node *Q; 		Q = (Node *)malloc(sizeof(Node)); 		printf("Q->data=?"); 		scanf("%d", &Q->data); 		Q->next = P->next; 		P->next == Q; i++; 	} 	else 	{ 		Node *Q; 		Q = (Node *)malloc(sizeof(Node)); 		printf("Q->data=?"); 		scanf("%d", &Q->data); 		P->next == Q; i++; 		Q->data = NULL; 	} 	printf("\n\n 打回车键，继续。"); ch = getch(); } Elemtype delete_N(Node *L, Elemtype e, int j) { 	Node *P; 	P = (Node *)malloc(sizeof(Node)); 	int m; 	if (j<0 && j>i) 		printf("overflow"); 	else if (i = 0) 		printf("空表"); 	else 	{ 		Node *Q; 		for (m = 0; m != j - 1; m++) 			P = P->next;   //用*P=*P++; 		Q = ((Node *)malloc(sizeof(Node))); 		Q = P->next; 		e = Q->data; 		P->next = P->next->next; 		free(Q); 		i--; 		return(e); 	} } int locat_N(Node *L, Elemtype e) { 	Node *P; 	P = L; 	int m; 	for (m = 1; m <= i; m++) 	if (P->next->data == e) 		return(m); 	if (m > i) 		return(-1); }

user: user-2
content: main函数后面少了一个 }  Q=((Node *)malloc(sizeof(Node)) 最左边 ( 多了

user: user-3
content: typedef struct Node { Elemtype data; struct Node *next; }Node;   根据错误提示去看, C,C++,还有不同编译器稍微有些不一样的地方, 这里如下修改   typedef struct _Node { Elemtype data; struct _Node *next; }Node;