user-0 提问: 怎么在这个链表中互换字符串？

回复:
user: user-1
content: 链表排序为何要换节点数据呢?不觉得效率很低下吗? 设待交换两节点为2,3号,直接把1号的next指向3,3的next指向2,2的next指向4 不一样达到"交换"节点的效果?

user: user-2
content: # include <stdio.h> # include <malloc.h> # include <stdlib.h>  struct stduent * creat_list(void); void printf_list(struct stduent *);  struct stduent { 	int age; 	char * name;                                	struct stduent * pnext; };   int _tmain(int argc, _TCHAR* argv[]) { 	struct stduent * phead; 	phead = creat_list(); 	printf_list(phead);  	return 0; }   // 创建一个链表； struct stduent * creat_list() { 	// 创建头结点； 	struct stduent * phead = (struct stduent *)malloc(sizeof(struct stduent)); 	struct stduent * ptemp = phead;  	// 创建后续节点； 	int ren,i; 	printf ("请输入学生的人数：\n"); 	scanf ("%d",&ren); 	for (i = 0; i<ren; i++) 	{ 		struct stduent * pnew = (struct stduent *)malloc(sizeof(struct stduent)); 		printf ("请输入第%d个学生的年龄:",i+1); 		scanf ("%d",&pnew->age); 		printf ("请输入第%d个学生的姓名:",i+1); 		char *p;  		p = (char*) malloc(10 * sizeof(char)); 		pnew->name = p; 		for(int j = 0;j<10;j++) 		{ 			*p = 0; 			p++; 		} 		scanf ("%s",pnew->name);    		pnew->pnext = NULL; 		ptemp->pnext = pnew; 		ptemp = pnew; 	}    	return phead; }  // 遍历输出每一个节点；  void printf_list(struct stduent * phead) {  	struct stduent * p, * h; 	int temp1; 	char * temp2;   // 看这里！！！！！！！！！！！！！！！！！！！！！！！！！！ 	for (p = phead->pnext; p != NULL; p = p->pnext) 	{ 		for (h = p->pnext; h != NULL; h = h->pnext) 		{ 			if (p->age < h->age) 			{ 				temp1 = p->age; 				p->age = h->age; 				h->age = temp1;  				// 看这里！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！ 				temp2 = p->name; 				p->name = h->name; 				h->name = temp2;  			} 		} 	}  	for (p = phead->pnext; p != NULL; p = p->pnext) 	{ 		printf ("%d\n",p->age); 		printf ("%s\n",p->name); 	} }

user: user-3
content: 几个问题： 1.需要为pnew->name给malloc字符数组空间 2.printf_list函数里字符串拷贝要用strcpy,而不是直接用= 3.char temp2[32] = {0}; 要分配空间，而不是char *temp2;  # include <stdio.h> # include <malloc.h> # include <stdlib.h> #include<string.h>  struct stduent * creat_list(void); void printf_list(struct stduent *);  struct stduent { 	int age; 	char * name;                                // 看这里！！！！！！！！！！！！！！！ 	struct stduent * pnext; };  int main(void) { 	struct stduent * phead; 	phead = creat_list(); 	printf_list(phead);  	return 0; }  // 创建一个链表； struct stduent * creat_list() { 	// 创建头结点； 	struct stduent * phead = (struct stduent *)malloc(sizeof(struct stduent)); 	struct stduent * ptemp = phead;  	// 创建后续节点； 	int ren, i; 	printf("请输入学生的人数：\n"); 	scanf("%d", &ren); 	for (i = 0; i<ren; i++) 	{ 		struct stduent * pnew = (struct stduent *)malloc(sizeof(struct stduent)); 		pnew->name = (char *)malloc(32); 		printf("请输入第%d个学生的年龄:", i + 1); 		scanf("%d", &pnew->age); 		printf("请输入第%d个学生的姓名:", i + 1); 		scanf("%s", pnew->name);        // 看这里！！！！！！！！！！！！！！！！！！！！！！！！  		pnew->pnext = NULL; 		ptemp->pnext = pnew; 		ptemp = pnew; 	}    	return phead; }  // 遍历输出每一个节点；  void printf_list(struct stduent * phead) {  	struct stduent * p, *h; 	int temp1; 	char temp2[32] = {0};   // 看这里！！！！！！！！！！！！！！！！！！！！！！！！！！ 	for (p = phead->pnext; p != NULL; p = p->pnext) 	{ 		for (h = p->pnext; h != NULL; h = h->pnext) 		{ 			if (p->age < h->age) 			{ 				temp1 = p->age; 				p->age = h->age; 				h->age = temp1; 				printf("%s %s\n", p->name, h->name); 				// 看这里！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！！ 				strcpy(temp2, p->name); 				strcpy(p->name, h->name); 				strcpy(h->name, temp2); 				//temp2 = p->name; 				//p->name = h->name; 				//h->name = temp2;  			} 		} 	}  	for (p = phead->pnext; p != NULL; p = p->pnext) 	{ 		printf("%d\n", p->age); 		printf("%s\n", p->name); 	}  }

user: user-4
content: 不是留个位子，是六个位置

user: user-4
content: 不是互换字串，是互换结构指针  比如原来排序head,a,b,c,d,e,f,null 那么就是如下意思 a->next=b; b->next=c; c->next=d; d->next=e; e->next=f;  现在要实现，b和d互换位置 因为是单链表，所以就是要实现 a->next=d; d->next=c; c->next=b; b->next=e;  也就是说，单链互相换位置，需要保存留个位子信息 节点1本身，节点1上家，节点1下家 节点2本身，节点2上家，节点2下家