笔试题小练2(链表)
来源:互联网 发布:诗朗诵录音软件 编辑:程序博客网 时间:2024/06/17 01:34
1、
/*编写代码,移除未排序链表中的重复结点*/#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct node{int data;struct node *next;}Link;typedef Link* linken;linken head;void insert_tail(int num){linken p = head;while(p->next != NULL){p = p->next;}linken new = (linken)malloc(sizeof(Link));new->data = num;p->next = new;new->next = NULL;}void display(){linken p = head;while(p->next != NULL){p = p->next;printf("%d ",p->data);}printf("\n");}void delete(){linken p = head;linken pre = head;linken ptr = head;while(p->next != NULL){p = p->next;pre = p;while(pre->next != NULL){ptr = pre;pre = pre->next;if(pre->data == p->data){ptr->next = pre->next;}}}}int main(){int i = 0;head = (linken)malloc(sizeof(Link));if(head == NULL){perror("malloc");return 0;}for(i = 0;i < 10;i++){insert_tail(i+1);}insert_tail(5);insert_tail(6);display();delete();display();return 0;}2、
/*实现一个算法,找出单链表中的倒数第k个结点*/#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct node{int data;struct node *next;}Link;typedef Link* linken;linken head;void insert_tail(int num){linken p = head;while(p->next != NULL){p = p->next;}linken new = (linken)malloc(sizeof(Link));new->data = num;p->next = new;new->next = NULL;}int display(){linken p = head;int count = 0;while(p->next != NULL){p = p->next;printf("%d ",p->data);count++;}printf("\ncount = %d\n",count);return count;}void search(int count,int k){linken p = head;int m_count = 0;int flag = 0;while(p->next != NULL){p = p->next;m_count++;if(m_count == count-k+1){printf("倒数第%d个结点为:%d\n",k,p->data);flag = 1;break;}}if(flag == 0){printf("超出查找范围!\n");}}int main(){int i = 0;int count = 0;int k = 0;head = (linken)malloc(sizeof(Link));if(head == NULL){perror("malloc");return 0;}for(i = 0;i < 10;i++){insert_tail(i+1);}insert_tail(5);insert_tail(6);count = display();printf("请输入k的值:");scanf("%d",&k);search(count,k);return 0;}
3、
/*编写代码:以给定x为基准,将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前*/#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct node{int data;struct node *next;}Link;typedef Link* linken;linken head;void insert_tail(int num) //尾插{linken p = head;while(p->next != NULL){p = p->next;}linken new = (linken)malloc(sizeof(Link));new->data = num;p->next = new;new->next = NULL;}void display() //输出链表{linken p = head;while(p->next != NULL){p = p->next;printf("%d ",p->data);}printf("\n");}void reserve(int num) //将链表分为两半{linken p = head;linken pre = head;linken temp = NULL;if(p->next == NULL){printf("no data!\n");}while(p->next != NULL) {pre = p;p = p->next;if(p->data < num) //如果数字小于所输入的num值{temp = (linken)malloc(sizeof(Link));temp->data = p->data; //将数值取出放入新的结点temp里temp->next = head->next; //然后用temp进行头插head->next = temp;if(p->next == NULL){pre->next = NULL;}pre->next = p->next; //删除原来的结点p = pre; //重新指向原来的结点}}}int main(){int i = 0;int num = 0;head = (linken)malloc(sizeof(Link));if(head == NULL){perror("malloc");return 0;}insert_tail(6);for(i = 0;i < 10;i++){insert_tail(i+1);}insert_tail(5);insert_tail(6);display();printf("请输入数字:");scanf("%d",&num);reserve(num);display();return 0;}
阅读全文
0 0
- 笔试题小练2(链表)
- web笔试题小练(2)
- 笔试算法(2)
- C笔试---(2)
- 笔试总结(2)
- 笔试_oracle(2)
- web笔试题小练(1)
- web笔试题小练(3)
- 笔试题集锦(2)
- C++笔试题(2)
- java笔试汇总(2)
- 笔试之SCJP(2)
- 笔试题集锦(2)
- sql笔试题(2)
- 笔试题(2)【Java 】
- javascript笔试题(2)
- 刷刷笔试题~(2)
- 网易2016笔试(2)
- Lua基础---lua字符串库函数详解,实例及正则表达式
- shell脚本if条件判断总结
- java访问HDFS文件系统
- 类似于黑名单的短信拦截
- ios CAReplicatorLayer使用
- 笔试题小练2(链表)
- Android Broadcas 广播
- 【全球机器人排名榜】第一名来自岛国日本,怎么破?
- 2017-7-13(框架介绍篇)
- POJ 1141
- 一个非常实用的Android开源工具类库
- php介绍和变量
- 在Mac 系统下搭建php学习环境(Apache+PHP+MySQL)
- 【tensorflow】最新版tensorflow安装