数据结构学习---链表的若干操作
来源:互联网 发布:淘宝代付关闭怎么回事 编辑:程序博客网 时间:2024/05/21 23:33
在OJ上做了几道链表操作的题目,通过和别人代码的比较也尽量使代码简洁了一些。
SDUT 2116 ~ 2122.
链表的结构体
struct node{int val;node *next;node(){val = 0; next = NULL;}};
顺序与逆序读入链表
node* normalCreat(int n){ //正常的顺序读入 建立链表node *head,*p,*rear;head = new node;rear = head; //用rear来操纵for(int i=0;i<n;i++){p = new node;scanf("%d",&p->val);rear->next = p;rear = rear->next;}return head; //返回头节点}node* reverseCreat(int n){ //逆向建立链表node *head,*p;int i;head = new node;for(int i=0;i<n;i++){p = new node;scanf("%d",&p->val);p->next = head->next; //这里的写法很巧妙 head->next = p;}return head;}
合并两个有序的单链表
node* mergeList(node *a,node *b){ //返回合并后的两个链表, (并未删除原来的链表)a = a->next; b = b->next;node *head = new node ;node *c = head;while(a && b){if(a->val > b->val){c->next = b;b = b->next;c = c->next;}else{c->next = a;a = a->next;c = c->next;}}while(a){c->next = a;a = a->next;c = c->next;}while(b){c->next = b;b = b->next;c = c->next;}return head;}
将链表中的奇数,偶数各成一个链表
node *odd,*even; //奇数表, 偶数表int oddNum,evenNum;void divideList(node* head){ //将链表中分成两个链表 1.奇数链表 2.偶数链表even = new node;odd = new node;node* rear_even = even;node* rear_odd = odd;node* rear = head;rear = rear->next;while(rear){if(rear->val % 2){oddNum++;rear_odd->next = rear;rear = rear->next;rear_odd = rear_odd->next;rear_odd->next = NULL;}else{evenNum++;// cout<<rear->val<<" bug"<<endl;rear_even->next = rear;rear = rear->next;rear_even = rear_even->next;rear_even->next = NULL;}}}
删除链表中重复的元素
int del(node* head,int n){ //链表中 删除重复的元素node *p,*q,*t;p = head->next;while(p->next != NULL){q = p;t = q->next;while(t->next != NULL){if(t->val == p->val){q->next = t->next;delete t;t = q->next;n--;}else{q = t;t = t->next;}}if(t->next == NULL){if(t->val == p->val){q->next = NULL;delete t;n--;}}p = p->next;}return n;}
有序读入链表
node* orCreat(int n){ //有序建立链表, 无序的读入数据,建立ascend(有序递增的表)node *head,*p,*rear;head = new node;rear = head;for(int i=0;i<n;i++){p = new node;rear = head;scanf("%d",&p->val);if(rear->next != NULL){while(1){if(rear->next->val>= p->val){p->next = rear->next;rear->next = p;break;}else rear = rear->next; if(rear->next == NULL){rear->next = p;break;}}}elsehead->next = p;}return head;}
打印链表
void show(node *head){ //打印链表的元素node *p;p = head->next;while(p!=NULL){if(p->next != NULL)printf("%d ",p->val);elseprintf("%d\n",p->val);p = p->next;}}
0 0
- 数据结构学习---链表的若干操作
- 关于链表的若干操作
- 数据结构的若干思考
- bo2-32.cpp 一个数组可生成若干静态链表(数据结构由c2-3.h定义)的基本操作(12个)
- CListBox的若干操作
- windows2003的若干操作
- 容器的若干操作!!!
- 单链表的若干操作
- BigDecimal的若干操作
- 【机器学习】pyspark中RDD的若干操作
- 【学习总结】数据结构之循环链表的基本操作
- 数据结构链表的操作
- linux的iptables若干操作
- 二叉树的若干操作
- 关于数据结构中栈的若干使用
- 学习驱动程序的若干法则
- 数据结构学习(七)——链队列的操作
- 数据结构学习(九)——链栈的操作
- 电纸书开发研究
- 豆瓣API使用介绍及通过ajax跨域获取url的json数据的方法
- 黑马北京新闻项目连载(1)--->引导界面
- 在D盘目录下创建一个HelloWord.txt文件,分别用PrintWriter,BufferWriter向HelloWorde2.txt,HelloWorde3.txt键入字符串"ABCDEFG”
- 众筹平台建立步骤有哪些
- 数据结构学习---链表的若干操作
- Python
- 给定一个数组,找出不在数组中的最小的那个数字
- 几点建议,让Redis在你的系统中发挥更大作用
- AS边学边写——day03简单的用户界面
- 怎样启用SQL SERVER混合身份验证方式!
- win下 socket基础实现(C++) 02
- timer控件
- 有关类的接口,实现类的多态