求链表倒数第n个元素
提示:设置一前一后两个指针,一个指针步长为1,另一个指针步长为n,当一个指针走到链表尾端时,
另一指针指向的元素即为链表倒数第n个元素。
#include <stdio.h>
#include <stdlib.h>
#include "LinkList.h"
void createLinkList(LNode **p) {
setnull(p); /*建议链表并设置为空表*/
int n = 10, i;
srand(time(0));
for (i = 1; i <= n; i++) {
insert(p, rand() % 100 + 1, i);
} /*插入数据到链表*/
}
LNode* getLNodeByIndex(LNode* head, int index) {
if (!head || index < 1) {
return NULL;
}
int j = 1;
LNode *q = head;
while (j < index && q != null) {
q = q->next;
j++;
}
if (q != null) {
return q;
} else {
printf("位置参数不正确!\n");
return NULL;
}
}
LNode* getNumByIndexFromRear(LNode* head, int index) {
LNode* begin = head;
LNode* end = getLNodeByIndex(head, index);
if (!end) {
return NULL;
}
while (end->next) {
begin = begin->next;
end = end->next;
}
return begin;
}
LNode* findLastElem(LNode* head, int last) {
if (!head) {
return NULL;
}
LNode* prev = head;
LNode* next = head;
while (last-- && next) {
next = next->next;
}
if (last+1) {
return NULL;
}
while (next) {
prev = prev->next;
next = next->next;
}
return prev;
}
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
LNode *head; /*定义静态变量*/
createLinkList(&head);
display(&head); /*显示链表所有数据*/
int index = 3;
puts("input last index:");
scanf("%d", &index);
// LNode* node = getNumByIndexFromRear(head, index);
LNode *node = findLastElem(head, index);
if (node) {
printf("LastIndex%3d:, Elem:%3d\n", index, node->data);
} else {
puts("Invalid Input.");
}
return EXIT_SUCCESS;
}
求链表倒数第n个元素的更多相关文章
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...
- 大杂烩 -- 查找单向链表倒数第m个元素
基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1.输入并查找 方案:头插法,正向查找第m个元素. ...
- 寻找链表倒数第k个元素,只遍历一遍(编程之美)
class LNode { public LNode next; public int data; } /*找出倒数第k个元素,只遍历一遍*/ class Kk { private static LN ...
- 13. 求链表倒数第k个节点
题目:输入1个链表,输出该链表倒数第k个节点,有头指针和尾指针.链表倒数第0个节点是链表的尾指针节点. 代码: /* 尾指针是倒数第0个,则倒数第k个是正数第len-k个,计算len */ #incl ...
- 链表之求链表倒数第k个节点
题目描述:输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针. 最普遍的方法是,先统计单链表中结点的个数,然后再找到第(n-k)个结点.注意链表为空,k为0,k为1,k大 ...
- 求链表倒数第k个节点
程序员面试题6-查找链表中倒数第k个结点 (-- ::)转载▼ 标签: 杂谈 分类: 程序设计 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针.链表结点定义如下 ...
- 【剑指offer】输出链表倒数第K个元素
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ ...
- 习题3.5 求链表的倒数第m个元素(20 分)浙大版《数据结构(第2版)》题目集
请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素. 函数接口定义: ElementType Find( List L, int m ); 其 ...
- PTA 求链表的倒数第m个元素
6-7 求链表的倒数第m个元素 (20 分) 请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>)个元素. 函数接口定义: ElementType ...
随机推荐
- spring data学习
在Spring Data模块中定义依赖: <dependencies> <dependency> <groupId>org.springframework.data ...
- Struts2--二次提交
在Struts2中,使用token的方式来防止二次提交.并且在默认的拦截器栈中提供了两个默认拦截器Token Interceptor和Token Session Interceptor.必须要在for ...
- Android毕业设计-微圈
勤拂拭软件出品,必属精品 : 勤拂拭软件 去年做了一个类似于我的朋友圈的项目,主要功能就是用户可以实时发表自己的动态,好友可以评论点赞什么的,可以建群,聊天啊,拉黑啊,反正是一个不错的社交软件,包含服 ...
- MYSQL 二进制安装
系统环境:CentOs6.7 i386 Mysql版本:mysql-5.6.36 root登录linux cd pwd #/root/ wget http://mirrors.sohu.com/mys ...
- solr6.6初探之solrj
一. solrj简介: solrj可以使Java应用程序很方便的访问与操作solr.solrj有几个核心类,分别为:1.SolrClient 2.SolrRequests 3.SolrQuerys 4 ...
- TeamViewer 服务队列网页怎么打开?有什么用?
熟悉一款软件,除了要熟悉它的界面,还应该熟悉它的网站.可能会有很多人说,网站我当然知道了.但是TeamViewer的服务队列页面你真的熟悉吗?所以,今天小编就带大家深入的了解一下TeamViewer服 ...
- 毕业回馈-89C51之GPIO使用(流水灯)
今天分享一个89c51制作的8位流水灯案例.使用Proteus仿真. 同上一遍文章不同.上一篇文章中对于GPIO操作主要是位操作,即sbit led1=P0^0;其中P0^0代表p0.0这个引脚,然后 ...
- JAVA虚拟机:对象的创建过程
简要说明的话,Java对象的创建过程分为下面几步: 1.执行相关检查: 2.为对象分配内存,将分配到的内存空间都初始化为零值: 3.进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤: 1.执行 ...
- swiper实现臭美app滑动效果
一.臭美app效果: 我的需求是这样,上面正常滑动,点击下面的小卡牌,上面的滑动区也随之切换到当前的点击态. 二.实现: css: 主要设置可见区域的几张卡牌的位置,注意的几个位置是,中间的激活态和左 ...
- vue mint-ui 实现省市区街道4级联动(仿淘宝京东收货地址4级联动)
demo及源码地址 https://github.com/artiely/citypicker 先去下载一个“省份.城市.区县.乡镇” 四级联动数据,然后 引入 import { Picker } f ...