【原创】编程题练习:头插法尾插法建立单链表及找寻单链表中的倒数第K个节点...
边界条件需要注意:两种方法,第一种遍历链表,寻找到节点,然后从头结点开始,寻找第n-k+1个节点;第二种方法,两个指针,第一个先走k-1步,然后第二个指针和第一个一起走,到尾节点的时候,第二个指针指向的节点就是倒数第k个节点了。
在程序中两方法没按顺序写。
切记 每次赋值都是赋头指针给p或者q。
2
3 using namespace std;
4
5 typedef struct List
6 {
7 int data;
8 struct List *next;
9 }List;
10
11 void HeadCreatList (List *L)
12 {
13 List *s;
14 L->next=NULL;
15 for (int i=0;i<10;i++)
16 {
17 s=new List;
18 s->data=i;
19 s->next=L->next;
20 L->next=s;
21 }
22 }//头插法建立链表
23 void TailCreatList(List *L)
24 {
25 List *s,*r;
26 r=L;
27 for (int i=0;i<10;i++)
28 {
29 s = new List;
30 s->data=i;
31 r->next=s;
32 r=s;
33 }
34 r->next=NULL;
35 }//尾插法建立链表
36 void DisPlay(List *L)
37 {
38 List *p=L->next;
39 while(p!=NULL)
40 {
41 cout << p->data;
42 p = p->next;
43 }
44 cout << endl;
45 }
46 void FindBackKthNode_1(List *L,int k)
47 {
48 if(L == NULL)
49 return ;
50 List *p,*q;
51 p = L;
52 q = L;
53 int i;
54 for(i = 0;i<k;i++)
55 {
56 if(p->next == NULL)
57 {
58 cout << "K is too big" << endl;
59 return ;
60 }
61 else
62 p = p->next;
63 }
64 while(p!=NULL)//p!=NULL保证遍历到最后一个节点
65 {
66 p = p->next;
67 q = q->next;
68 }
69 cout << q->data <<endl;
70 }
71 void FindBackKthNode_2(List *L ,int k)
72 {
73 if(L == NULL)
74 return ;
75 List *p = L->next;
76 int num = 0;
77 while(p)
78 {
79 p = p->next;
80 num++;
81 }
82 if(num<k)
83 {
84 cout << "K is too big" << endl;
85 return ;
86 }
87 else if(num == k)
88 {
89 p = L->next;
90 cout << p->data << endl;
91 }//这种方法的边界条件不好,需要加特殊判断
92 else if(num > k)
93 {
94 p = L;//注意此处要将头结点给p,不然下面的循环条件要改成num-k-1
95 for(int i = 0;i<num-k;i++)
96 {
97 p = p->next;
98 }
99 cout << p->data << endl;
100 }
101 }
102 int main()
103 {
104 List *a = new List;
105 List *b = new List;
106 HeadCreatList(a);
107 TailCreatList(b);
108 DisPlay(a);
109 DisPlay(b);
110 FindBackKthNode_1(a,5);
111 FindBackKthNode_2(b,5);
112 system("pause");
113
114 return 0;
115 }
转载于:https://www.cnblogs.com/xiawen/archive/2013/04/17/3026666.html
【原创】编程题练习:头插法尾插法建立单链表及找寻单链表中的倒数第K个节点...相关推荐
- C语言的双向链表头插法和尾插法,指定节点删除
文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...
- C语言的单链表创建:头插法/尾插法
文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...
- 计算机软件技术 上海电力学院,上海电力学院 计算机软件技术 实验三 用头插法和尾插法创建线性表...
上海电力学院计算机软件技术实验三用头插法和尾插法创建线性表 #include #define MAXLEN 9 struct table {int key; int othererm; } ; typ ...
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...
- 头插法和尾插法创建链表(有无头结点)
头插法和尾插法创建链表(有无头结点) 文章目录 头插法和尾插法创建链表(有无头结点) 1 头插法 1.1头插法建表规则: 1.2 头插法建表代码实现 2 尾插法 2.1 尾插法建表规则: 2.2 尾插 ...
- 单链表的头插法和尾插法c语言实现
/*单链表的头插法和尾插法c语言实现*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...
- 单链表头插法和尾插法
1.头插法 头插法:每次把新节点插入到头节点之后,创建的单链表和数据输入顺序相反. 防止单链表是空的而设的. 当链表为空的时候,带头结点的头指针就指向头结点,头结点的指针域存储的数值为NULL. &l ...
- C语言头插法尾插法创建单链表
前言 链表 [Linked List]:链表是由一组不必相连[不必相连:可以连续也可以不连续]的内存结构 [节点],按特定的顺序链接在一起的抽象数据类型. 下面介绍单链表的创建: 创建节点 链表是由一 ...
- 采用头插法和尾插法建立单链表
面说一下如果用C语言建立单链表,分为头插法和尾插法两种. 采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后 ...
- java实现单链表的建立(头插法和尾插法)
单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...
最新文章
- 《Nature》发布毫米级软体机器人,可在没有任何物理干预情况下游走于人体
- 苹果系统怎么降低版本_1903、1809...到底怎么看系统版本?
- 商品品牌信息的增删改查操作步骤_javaweb09-Servlet增删改查
- odoo pivot中去掉求和_一文读懂深度学习中的卷积运算与图像处理
- AI新时代-大神教你使用python+Opencv完成人脸解锁(附源码)
- MyBatis框架 多表联合查询实现
- 无缝的缓存读取:双存储缓存策略
- mysql事务、视图
- python如何运行代码_python上怎么跑(运行)代码
- poj-3034 Whac-a-Mole
- react native环境搭建的一些坑
- 2017年 外牌转沪牌 攻略 (沪南路车管所)
- 多元线性回归及虚拟变量(哑变量)设置
- 针对不同场景的Python合并多个Excel方法
- Gradle 插件 + ASM 实战 - 监控图片加载告警
- sa提开放系统下的虚拟新贵Virtualbox权技巧之xp_regwrite替换sethc.exe
- 服务器温度显示过高,服务器机房温度过高
- 深度学习(10)ablation experiments
- [Delaunay Triangle] [图形学] C# 实现代码
- 分布式对偶平均法(DDA)