user-0 提问: 链表问题~~~求解答

回复:
user: user-0
content: 引用 8 楼 oYinGui1 的回复: void add (stu student, note **plist ) {     note *pnew = (note *) malloc((size_t) sizeof(note));     pnew->students = student;     pnew->next = NULL;          if (*plist == NULL) {         *plist = pnew;     }     else {         note *tmp = *plist;         while (tmp->next != NULL) {             tmp = tmp->next;         }         tmp->next = pnew;     } }  成功了，谢谢

user: user-0
content: 引用 7 楼 xuzhouweihao 的回复:下面链表的创建部分这个参考下吧。谢谢

user: user-1
content: void add (stu student, note **plist ) {     note *pnew = (note *) malloc((size_t) sizeof(note));     pnew->students = student;     pnew->next = NULL;          if (*plist == NULL) {         *plist = pnew;     }     else {         note *tmp = *plist;         while (tmp->next != NULL) {             tmp = tmp->next;         }         tmp->next = pnew;     } }

user: user-2
content: 下面链表的创建部分这个参考下吧。   /*   * 有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数，  * 到末尾时循环至开头继续进行，求最后一个被删掉的数的原始下标位置。  */  #include <stdio.h> #include <stdlib.h>  typedef struct shuzu{ 	int data; 	struct shuzu *next; }*Pshuzu;  void create_link(Pshuzu *node,int data) { 	if((*node) == NULL){ 		(*node) = malloc(sizeof(struct shuzu)); 		(*node)->data = data; 		(*node)->next = NULL; 	}else{ //(*node) != NULL 		create_link(&((*node)->next),data); 	}  	return; }  void deletn_link(Pshuzu *node,int n) { 	Pshuzu p = NULL; 	Pshuzu pnext =NULL; 	int i;  	if((*node) == NULL){ 		return; 	}  	pnext = (*node);  	while(1){ 		if((*node)->next == NULL){ 			break; 		} 		for(i=0; i<(n-1); i++){ 			pnext = pnext->next; 			if(pnext == NULL){ 				pnext = (*node); 			} 		}  		if(pnext->next != NULL){ 			free(pnext->next); 			pnext->next = pnext->next->next; 			pnext = pnext->next; 			if(pnext == NULL){ 				 pnext = (*node); 			} 		}else{ 			p = (*node)->next; 			free(*node); 			(*node) = p; 			pnext = (*node); 		} 	} }  void print_link(Pshuzu *node) { 	if((*node) == NULL){ 		printf("NULL\n"); 		return; 	}  	printf("%d->",(*node)->data); 	print_link(&((*node)->next)); 	return; }  void delet_link(Pshuzu *node) { 	if((*node) == NULL){ 	}else if((*node)->next == NULL){ 		free(*node); 		(*node) = NULL; 	}else{ 		delet_link(&((*node)->next)); 	}  	return; }  int main() { 	int i; 	Pshuzu root=NULL;  	for(i=1; i<=1000; i++){ 		create_link(&root,i); 	}  	print_link(&root);  	deletn_link(&root,2);  	print_link(&root);  	delet_link(&root);  }

user: user-3
content: 引用 5 楼 u012805025 的回复:[quote=引用 2 楼 truelance 的回复:] 你要把函数定义成 void add (stu student, note **pplist ) 谢谢[/quote] up！

user: user-0
content: 引用 2 楼 truelance 的回复:你要把函数定义成 void add (stu student, note **pplist ) 谢谢

user: user-0
content: 引用 3 楼 oYinGui1 的回复: void add (stu student, note *plist ) {     note *pnew;     note *prev = plist;           pnew = (note *) malloc (sizeof(note));           pnew->students  = student;     pnew->next = NULL;     if (prev == NULL)            plist = pnew;              else            {             while ( prev->next !=NULL )                     prev = prev->next;                prev->next = pnew;     } }  看你的add形参列表就清楚了，你修改的只是plist这个形参，并没有修改传的实参。  改了一下，但不成功，能否帮忙改正，我对比一下，谢谢

user: user-1
content: void add (stu student, note *plist ) {     note *pnew;     note *prev = plist;           pnew = (note *) malloc (sizeof(note));           pnew->students  = student;     pnew->next = NULL;     if (prev == NULL)            plist = pnew;              else            {             while ( prev->next !=NULL )                     prev = prev->next;                prev->next = pnew;     } }  看你的add形参列表就清楚了，你修改的只是plist这个形参，并没有修改传的实参。

user: user-4
content: 你要把函数定义成 void add (stu student, note **pplist )

user: user-1
content: 传指针类型的变量可以达到修改指针指向的对象内容，但是这也避免不了传进去的指针是个副本的问题，你对它的修改，反映不到原指针上。C里要通过函数修改指针变量，就传个指针的指针。C++里传指针的引用。