user-0 提问: 大佬求帮忙

回复:
user: user-0

user: user-0

user: user-1
content: 引用 7 楼 自信男孩的回复:[quote=引用 4 楼 前行者001 的回复:] 你好，你的源程序好像存在好多问题。我下边都帮你找出来了。双斜杠后边注释的就是。 #include<stdio.h> #include<stdlib.h> struct node   {    	int  data;       struct node * next;   }; typedef struct node NODE;   typedef struct node * PNODE;  PNODE ins_list(PNODE p,int n)   //在尾结点后插入 {      PNODE p1;    p1 = (PNODE)malloc(sizeof(NODE));    p1->data = n;        p->next = p1;	//尾插法     p1->next = NULL;	//末尾结点的下一个结点置空         return p1;		//返回末尾结点  } void outlist( PNODE head )   {    	PNODE p;       p = head->next;      printf("删除后链表结点值\n");      while ( p != NULL)       {    		printf("%d  ", p->data);           p = p->next;       }   } void dele(PNODE head, int x)  { 	PNODE p1,p2,p3; 	p1 = head;  	p2 = p1->next;  	p3 = p2->next;  	while(p2->data !=x&&p3->next!=NULL)//当P2->data != x表示当前节点不是所寻找的节点  	{ 		p1=p1->next;   		p2=p2->next;  		p3=p3->next;  	} 	 	if(p3->next!=NULL)//如果P3不为空。说明上边的while循环找到了 x值点  	{ 		free(p2);p1->next = p3; 	} } int main() { 	int x,n; 	char k; 	PNODE head = (PNODE)malloc(sizeof(NODE)); 	head->next = NULL;//头指针一定要置空；不然输出的时候没法控制；  	PNODE p = head; 	while(1) 	{ 		scanf("%d",&n); 		p = ins_list(p, n);//返回尾结点  		k = getchar(); 		if(k=='\n') 		break; 	} 	scanf("%d",&x); 	dele( head, x ); 	outlist( head );       return 0;   }   测试结果 有问题的地方欢迎指正。  没看明白楼主的要求吧[/quote] 不好意思，我看错题意了。

user: user-2
content: 引用 4 楼 前行者001 的回复:你好，你的源程序好像存在好多问题。我下边都帮你找出来了。双斜杠后边注释的就是。 #include<stdio.h> #include<stdlib.h> struct node   {    	int  data;       struct node * next;   }; typedef struct node NODE;   typedef struct node * PNODE;  PNODE ins_list(PNODE p,int n)   //在尾结点后插入 {      PNODE p1;    p1 = (PNODE)malloc(sizeof(NODE));    p1->data = n;        p->next = p1;	//尾插法     p1->next = NULL;	//末尾结点的下一个结点置空         return p1;		//返回末尾结点  } void outlist( PNODE head )   {    	PNODE p;       p = head->next;      printf("删除后链表结点值\n");      while ( p != NULL)       {    		printf("%d  ", p->data);           p = p->next;       }   } void dele(PNODE head, int x)  { 	PNODE p1,p2,p3; 	p1 = head;  	p2 = p1->next;  	p3 = p2->next;  	while(p2->data !=x&&p3->next!=NULL)//当P2->data != x表示当前节点不是所寻找的节点  	{ 		p1=p1->next;   		p2=p2->next;  		p3=p3->next;  	} 	 	if(p3->next!=NULL)//如果P3不为空。说明上边的while循环找到了 x值点  	{ 		free(p2);p1->next = p3; 	} } int main() { 	int x,n; 	char k; 	PNODE head = (PNODE)malloc(sizeof(NODE)); 	head->next = NULL;//头指针一定要置空；不然输出的时候没法控制；  	PNODE p = head; 	while(1) 	{ 		scanf("%d",&n); 		p = ins_list(p, n);//返回尾结点  		k = getchar(); 		if(k=='\n') 		break; 	} 	scanf("%d",&x); 	dele( head, x ); 	outlist( head );       return 0;   }   测试结果 有问题的地方欢迎指正。  没看明白楼主的要求吧

user: user-2
content: 引用 3 楼 Robinhood169 的回复:不行啊 楼上的就可以了吗？符合你的预期吗？你的要求是删除输入的前置节点。楼主说不行，是哪儿不行了。问题就这样不了了

user: user-0
content: 我明白了，谢谢大佬

user: user-1
content: 你好，你的源程序好像存在好多问题。我下边都帮你找出来了。双斜杠后边注释的就是。 #include<stdio.h> #include<stdlib.h> struct node   {    	int  data;       struct node * next;   }; typedef struct node NODE;   typedef struct node * PNODE;  PNODE ins_list(PNODE p,int n)   //在尾结点后插入 {      PNODE p1;    p1 = (PNODE)malloc(sizeof(NODE));    p1->data = n;        p->next = p1;	//尾插法     p1->next = NULL;	//末尾结点的下一个结点置空         return p1;		//返回末尾结点  } void outlist( PNODE head )   {    	PNODE p;       p = head->next;      printf("删除后链表结点值\n");      while ( p != NULL)       {    		printf("%d  ", p->data);           p = p->next;       }   } void dele(PNODE head, int x)  { 	PNODE p1,p2,p3; 	p1 = head;  	p2 = p1->next;  	p3 = p2->next;  	while(p2->data !=x&&p3->next!=NULL)//当P2->data != x表示当前节点不是所寻找的节点  	{ 		p1=p1->next;   		p2=p2->next;  		p3=p3->next;  	} 	 	if(p3->next!=NULL)//如果P3不为空。说明上边的while循环找到了 x值点  	{ 		free(p2);p1->next = p3; 	} } int main() { 	int x,n; 	char k; 	PNODE head = (PNODE)malloc(sizeof(NODE)); 	head->next = NULL;//头指针一定要置空；不然输出的时候没法控制；  	PNODE p = head; 	while(1) 	{ 		scanf("%d",&n); 		p = ins_list(p, n);//返回尾结点  		k = getchar(); 		if(k=='\n') 		break; 	} 	scanf("%d",&x); 	dele( head, x ); 	outlist( head );       return 0;   }   测试结果 有问题的地方欢迎指正。

user: user-0
content: 不行啊

user: user-2
content: 测试方法：11 22 33 44 55 66 77输完后回车，然后再输入EOF，最后输入val（key值）

user: user-2
content: #include<stdio.h> #include<stdlib.h>  struct node {     int  data;     struct node * next; }; typedef struct node NODE; typedef struct node * PNODE;    PNODE create_link(PNODE phead) {     int cnt, ret, n;     PNODE pnew, pcur;      //scanf("%d", &cnt);      pcur = phead;     while (1) {         ret = scanf("%d", &n);         if (ret == EOF)             break;         pnew = (PNODE)malloc(sizeof(NODE));         if (!pnew)             exit(0);         pnew->data = n;         pnew->next = NULL;         pcur->next = pnew;         pcur = pnew;     }      return phead; }  void visit_link(PNODE phead) {     PNODE pcur = phead->next;      while (pcur) {         printf("%d ", pcur->data);         pcur = pcur->next;     }     putchar(10); }   PNODE del_prev_node(PNODE phead, int val) {     PNODE pcur, prev, prev_prev;      prev_prev = prev = phead;     pcur = phead->next;      while (pcur) {         if (pcur->data == val) {             if (pcur == phead->next)                 break;             prev_prev->next = prev->next;             free(prev);             break;         }         prev_prev = prev;         prev = pcur;         pcur = pcur->next;     }      return phead; }  int main(void) {     int val;     PNODE phead = (PNODE)malloc(sizeof(NODE));     if (!phead)         return -1;      create_link(phead);      //visit_link(phead);     scanf("%d", &val);     del_prev_node(phead, val);     visit_link(phead);      return 0; }    #if 0 PNODE ins_list(PNODE head,int n) {     PNODE p1;     p1 = (PNODE)malloc(sizeof(NODE));     p1->data = n;     p1->next = head->next;     head->next = p1;     //p1->next = NULL;     //return p1;     return head; }  void outlist( PNODE head ) {     PNODE p;     p = head->next;     while ( p != NULL )     {         printf("%d\n", p->data);         p = p->next;     } } void dele(PNODE head, int x) {     PNODE p1,p2,p3;     p1 = head;     p2 = p1->next;     p3 = p2->next;     while(p2->data==x&&p3->next!=NULL)     {         p1=p1->next;         p2=p2->next;         p3=p3->next;     }     free(p2);     p1->next = p3; } int main() {     int x,n, cnt;     char k;     int ret, i;     PNODE head = (PNODE)malloc(sizeof(NODE));     PNODE p = head;     scanf("%d", &cnt);      i = 0;     while(i < cnt)     {         ret = scanf("%d",&n);         if (ret == EOF)             break;         ins_list(head, n);         //p = ins_list(head, n);          //k = getchar();         //if(k=='\n')          //  break;          i++;     }     outlist( head );     scanf("%d",&x);     dele( head, x );     outlist( head );     return 0; } #endif 供参考～  输入EOF，LINUX下输入ctrl+d，windows输入ctrl+z