链表节点交换
2014-07-08 20:18
162 查看
节点交换有两种思路,第一种是交换内容而不交换指针,第二种是直接改变指针而不交换节点内容。
链表节点定义如下:
第一种思路的代码如下,首先涉及到交换函数的写法,归为两类,一类是数字交换,另一类是字符串交换。
指针实现的字符串交换代码如下:
也可以这样写:
数字交换代码如下:
节点交换代码:
链表节点定义如下:
struct stud /*定义一个结构体类型struct stud*/ { char sno[40]; //学号 char name[40]; //姓名 float score[3]; //三科成绩 struct stud *next; //下一节点 };
第一种思路的代码如下,首先涉及到交换函数的写法,归为两类,一类是数字交换,另一类是字符串交换。
指针实现的字符串交换代码如下:
void swap_s(char* src, char* dst) { char tmp ; int a = strlen(src)>strlen(dst)?1:0; tmp = *src; *src=*dst; *dst=tmp; while(*src++ && *dst++) { tmp = *src; *src=*dst; *dst=tmp; } if(a) { while(*src) { dst++; *dst=*src++; } *dst='\0'; } else { while(*dst) { *src=*dst++; src++; } *src='\0'; } return ; }
也可以这样写:
void swap_s(char *str1,char *str2) { char str[40]; char *p=str,*p1=str1,*p2=str2; while((*p++=*p1++)!=NULL); p=str; p1=str1; while((*p1++=*p2++)!=NULL); p2=str2; while((*p2++=*p++)!=NULL); }
数字交换代码如下:
void swap_f(float* src, float* dst) { float tmp; tmp = *src; *src=*dst; *dst=tmp; return ; }
节点交换代码:
void swap(Student *src,Student *dst) { Student *tmp = NULL; swap_s(src->sno,dst->sno); swap_s(src->name,dst->name); swap_f(&src->score[0],&dst->score[0]); swap_f(&src->score[1],&dst->score[1]); swap_f(&src->score[2],&dst->score[2]); return ; }
相关文章推荐
- 链表两两交换节点
- 交换链表相邻节点
- 两两交换链表中的节点
- 链表排序交换节点为什么还得单独交换next指针?
- [小算法] 交换链表中的两个节点
- 两两交换链表中的节点
- Swap Nodes in Pairs 链表交换相邻的节点
- 交换链表当中两个节点
- Leetcode #24. Swap Nodes in Pairs 链表节点交换 解题报告
- 两两交换链表中的节点
- leetcode-24,交换链表相邻节点,递归实现
- 单链表相邻两个节点之间交换顺序
- Swap Nodes in Pairs 链表两两交换节点@LeetCode
- 两两交换链表中的节点
- 两两交换链表中的节点
- leetcode24,交换链表相邻的节点
- Java单链表基本操作(九)--交换相邻节点对的值
- 两两交换链表中的节点
- LintCode-两两交换链表中的节点
- 两两交换链表中的节点