user-0 提问: 单链表赋初值的问题

回复:
user: user-1
content: 引用 7 楼 u013163178 的回复:我也来凑凑热闹 #include<stdio.h> #include<stdlib.h>  struct list { 		int data; 		struct list *next ; };  void init_list(struct list **head) { 		int i; 		struct list *p,*tmp; 		p = (struct list *)malloc(sizeof(struct list)); 		*head = p; 		(*head) ->data = 1; 		for(i = 1; i < 10; ++i) 		{ 				tmp = (struct list *)malloc(sizeof(struct list)); 				tmp ->data = i + 1; 				tmp ->next = NULL; 				p ->next = tmp; 				p = p ->next; 		} }  void print_list(struct list *head) { 		while(head != NULL) 		{ 				printf("%d\t",head ->data); 				head = head ->next; 		} }  int main() { 		struct list *root; 		init_list(&root); 		print_list(root);  		return 0; } 画蛇添足，狗尾续豿

user: user-2
content: 引用 1 楼 starytx 的回复:警告的意思是你定义了la却没有引用过，也就是没有使用星哥抢楼神速。

user: user-3
content: 警告的意思是你定义了la却没有引用过，也就是没有使用

user: user-1
content: 引用 5 楼 baijiaheizhiganmao 的回复:[quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 baijiaheizhiganmao 的回复:] #include <stdio.h> #include <stdlib.h>  typedef struct node {  	int data; 	struct node *next; }SLink;  /***初始化单链表 ***/ void InitList(SLink **sq) { 	*sq=(SLink *)malloc(sizeof(SLink)); 	(*sq)->next=NULL; }   /******主函数 *******/ int main(void) { 	SLink *la; 	SLink *temp; 	SLink *p,*q; 	int i; 	InitList(&la);  	q = la; 	//想把数字1到10放到单链表la的是个节点中，应该怎么实现？ 	for(i = 1;i<11;i++) 	{ 		temp = (SLink *)malloc(sizeof(SLink)); 		temp->data = i; 		temp->next = NULL; 		q->next = temp; 		q = q->next; 	} 	//测试一下是否正确 	q = la->next; 	while(q) 	{ 		printf("%d ",q->data); 		q = q->next; 	} 	return 0; }     中间变量用得不少哇。 LINUX之父说很多人不懂得指针 中间变量用得越多，对指针的了解就越少。 typedef struct node { int data; struct node *next; } SLink;  void InitList (SLink * sq) {     for (int i = 1; i <= 10; i ++)  sq -> next = (NLink *) malloc  (sizeof (NLink)), sq-> data = i, sq = sq -> next; }  int main (void) {     NLink * sl = (NLink *) malloc  (sizeof (NLink));     InitList(sl);     /* use sl ......*/ }[/quote] 是啊，鄙人才疏学浅，而且我又不是计算机，我只能写我能看懂的代码。[/quote]  不要客气，大家互相学习。考虑到InitList的参数是SLink **，不才兄弟俺闲得无聊，弄了个新版： typedef struct node { int data; struct node * next; } SLink;  void InitList (SLink * * sq) {     * sq = (SLink *) malloc (sizeof (SLink));      for (int i = 1; i <= 10; i ++)     {         (* sq) -> next = (SLink *) malloc (sizeof (SLink));         (* sq) -> data = i;         sq = & ((* sq) -> next);     }          (* sq) -> next = 0; }  int main (void) {     SLink * sl;     InitList (& sl);     while (sl->next) printf ("%d\n", sl -> data), sl = sl -> next;     /* use sl ......*/ }

user: user-1
content: 引用 5 楼 baijiaheizhiganmao 的回复:[quote=引用 4 楼 sholber 的回复:] [quote=引用 3 楼 baijiaheizhiganmao 的回复:] #include <stdio.h> #include <stdlib.h>  typedef struct node {  	int data; 	struct node *next; }SLink;  /***初始化单链表 ***/ void InitList(SLink **sq) { 	*sq=(SLink *)malloc(sizeof(SLink)); 	(*sq)->next=NULL; }   /******主函数 *******/ int main(void) { 	SLink *la; 	SLink *temp; 	SLink *p,*q; 	int i; 	InitList(&la);  	q = la; 	//想把数字1到10放到单链表la的是个节点中，应该怎么实现？ 	for(i = 1;i<11;i++) 	{ 		temp = (SLink *)malloc(sizeof(SLink)); 		temp->data = i; 		temp->next = NULL; 		q->next = temp; 		q = q->next; 	} 	//测试一下是否正确 	q = la->next; 	while(q) 	{ 		printf("%d ",q->data); 		q = q->next; 	} 	return 0; }     中间变量用得不少哇。 LINUX之父说很多人不懂得指针 中间变量用得越多，对指针的了解就越少。 typedef struct node { int data; struct node *next; } SLink;  void InitList (SLink * sq) {     for (int i = 1; i <= 10; i ++)  sq -> next = (NLink *) malloc  (sizeof (NLink)), sq-> data = i, sq = sq -> next; }  int main (void) {     NLink * sl = (NLink *) malloc  (sizeof (NLink));     InitList(sl);     /* use sl ......*/ }[/quote] 是啊，鄙人才疏学浅，而且我又不是计算机，我只能写我能看懂的代码。[/quote]  不要客气，大家互相学习。考虑到InitList的参数是SLink **，不才兄弟俺闲得无聊，弄了个新版： typedef struct node { int data; struct node * next; } SLink;  void InitList (SLink * * sq) {     * sq = (SLink *) malloc (sizeof (SLink));      for (int i = 1; i <= 10; i ++)     {         (* sq) -> next = (SLink *) malloc (sizeof (SLink));         (* sq) -> data = i;         sq = & ((* sq) -> next);     }     (* sq) -> next = 0; }  int main (void) {     SLink * sl;     InitList (& sl);     while (sl->next) printf ("%d\n", sl -> data), sl = sl -> next;     /* use sl ......*/ }

user: user-4
content: 我也来凑凑热闹 #include<stdio.h> #include<stdlib.h>  struct list { 		int data; 		struct list *next ; };  void init_list(struct list **head) { 		int i; 		struct list *p,*tmp; 		p = (struct list *)malloc(sizeof(struct list)); 		*head = p; 		(*head) ->data = 1; 		for(i = 1; i < 10; ++i) 		{ 				tmp = (struct list *)malloc(sizeof(struct list)); 				tmp ->data = i + 1; 				tmp ->next = NULL; 				p ->next = tmp; 				p = p ->next; 		} }  void print_list(struct list *head) { 		while(head != NULL) 		{ 				printf("%d\t",head ->data); 				head = head ->next; 		} }  int main() { 		struct list *root; 		init_list(&root); 		print_list(root);  		return 0; }

user: user-5
content: STL 之 list源代码自行实现（iterator）   这也许对你有用的，若有用，请给分哈！！！

user: user-6
content: 引用 4 楼 sholber 的回复:[quote=引用 3 楼 baijiaheizhiganmao 的回复:] #include <stdio.h> #include <stdlib.h>  typedef struct node {  	int data; 	struct node *next; }SLink;  /***初始化单链表 ***/ void InitList(SLink **sq) { 	*sq=(SLink *)malloc(sizeof(SLink)); 	(*sq)->next=NULL; }   /******主函数 *******/ int main(void) { 	SLink *la; 	SLink *temp; 	SLink *p,*q; 	int i; 	InitList(&la);  	q = la; 	//想把数字1到10放到单链表la的是个节点中，应该怎么实现？ 	for(i = 1;i<11;i++) 	{ 		temp = (SLink *)malloc(sizeof(SLink)); 		temp->data = i; 		temp->next = NULL; 		q->next = temp; 		q = q->next; 	} 	//测试一下是否正确 	q = la->next; 	while(q) 	{ 		printf("%d ",q->data); 		q = q->next; 	} 	return 0; }     中间变量用得不少哇。 LINUX之父说很多人不懂得指针 中间变量用得越多，对指针的了解就越少。 typedef struct node { int data; struct node *next; } SLink;  void InitList (SLink * sq) {     for (int i = 1; i <= 10; i ++)  sq -> next = (NLink *) malloc  (sizeof (NLink)), sq-> data = i, sq = sq -> next; }  int main (void) {     NLink * sl = (NLink *) malloc  (sizeof (NLink));     InitList(sl);     /* use sl ......*/ }[/quote] 是啊，鄙人才疏学浅，而且我又不是计算机，我只能写我能看懂的代码。

user: user-1
content: 引用 3 楼 baijiaheizhiganmao 的回复:#include <stdio.h> #include <stdlib.h>  typedef struct node {  	int data; 	struct node *next; }SLink;  /***初始化单链表 ***/ void InitList(SLink **sq) { 	*sq=(SLink *)malloc(sizeof(SLink)); 	(*sq)->next=NULL; }   /******主函数 *******/ int main(void) { 	SLink *la; 	SLink *temp; 	SLink *p,*q; 	int i; 	InitList(&la);  	q = la; 	//想把数字1到10放到单链表la的是个节点中，应该怎么实现？ 	for(i = 1;i<11;i++) 	{ 		temp = (SLink *)malloc(sizeof(SLink)); 		temp->data = i; 		temp->next = NULL; 		q->next = temp; 		q = q->next; 	} 	//测试一下是否正确 	q = la->next; 	while(q) 	{ 		printf("%d ",q->data); 		q = q->next; 	} 	return 0; }     中间变量用得不少哇。 LINUX之父说很多人不懂得指针 中间变量用得越多，对指针的了解就越少。 typedef struct node { int data; struct node *next; } SLink;  void InitList (SLink * sq) {     for (int i = 1; i <= 10; i ++)  sq -> next = (NLink *) malloc  (sizeof (NLink)), sq-> data = i, sq = sq -> next; }  int main (void) {     NLink * sl = (NLink *) malloc  (sizeof (NLink));     InitList(sl);     /* use sl ......*/ }

user: user-6
content: #include <stdio.h> #include <stdlib.h>  typedef struct node {  	int data; 	struct node *next; }SLink;  /***初始化单链表 ***/ void InitList(SLink **sq) { 	*sq=(SLink *)malloc(sizeof(SLink)); 	(*sq)->next=NULL; }   /******主函数 *******/ int main(void) { 	SLink *la; 	SLink *temp; 	SLink *p,*q; 	int i; 	InitList(&la);  	q = la; 	//想把数字1到10放到单链表la的是个节点中，应该怎么实现？ 	for(i = 1;i<11;i++) 	{ 		temp = (SLink *)malloc(sizeof(SLink)); 		temp->data = i; 		temp->next = NULL; 		q->next = temp; 		q = q->next; 	} 	//测试一下是否正确 	q = la->next; 	while(q) 	{ 		printf("%d ",q->data); 		q = q->next; 	} 	return 0; }

user: user-6
content: InitList(SLink *&sq) 这样声明一个函数的形参真是有够酷的。