提示:设置一前一后两个指针,一个指针步长为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个元素的更多相关文章

  1. 笔试题&amp;面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素

    设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...

  2. 大杂烩 -- 查找单向链表倒数第m个元素

    基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1.输入并查找 方案:头插法,正向查找第m个元素. ...

  3. 寻找链表倒数第k个元素,只遍历一遍(编程之美)

    class LNode { public LNode next; public int data; } /*找出倒数第k个元素,只遍历一遍*/ class Kk { private static LN ...

  4. 13. 求链表倒数第k个节点

    题目:输入1个链表,输出该链表倒数第k个节点,有头指针和尾指针.链表倒数第0个节点是链表的尾指针节点. 代码: /* 尾指针是倒数第0个,则倒数第k个是正数第len-k个,计算len */ #incl ...

  5. 链表之求链表倒数第k个节点

    题目描述:输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针. 最普遍的方法是,先统计单链表中结点的个数,然后再找到第(n-k)个结点.注意链表为空,k为0,k为1,k大 ...

  6. 求链表倒数第k个节点

    程序员面试题6-查找链表中倒数第k个结点 (-- ::)转载▼ 标签: 杂谈 分类: 程序设计 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针.链表结点定义如下 ...

  7. 【剑指offer】输出链表倒数第K个元素

    /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ ...

  8. 习题3.5 求链表的倒数第m个元素(20 分)浙大版《数据结构(第2版)》题目集

    请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素. 函数接口定义: ElementType Find( List L, int m ); 其 ...

  9. PTA 求链表的倒数第m个元素

    6-7 求链表的倒数第m个元素 (20 分)   请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>)个元素. 函数接口定义: ElementType ...

随机推荐

  1. 机器学习基石:13 Hazard of Overfitting

    泛化能力差和过拟合: 引起过拟合的原因: 1)过度VC维(模型复杂度高)------确定性噪声: 2)随机噪声: 3)有限的样本数量N. 具体实验来看模型复杂度Qf/确定性噪声.随机噪声sigma2. ...

  2. jenkins构建个人github上的项目

    最近刚进一家新公司,公司采用的是自动化集成测试工具jenkins进行,构建,部署项目 因为以前,没接触过这类工具,所以打算在自己本机安装一个jenkins进行学习 具体安装步骤,很简单,不做讲解 1. ...

  3. [Codeforces 873B]Balanced Substring

    Description You are given a string s consisting only of characters 0 and 1. A substring [l, r] of s  ...

  4. [WC2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  5. POI ZAW

    要求一个最短路,担心的就是一条边被正反经过两次. 规定第一步为1到i,并把这条边设为不可经过.然后从i做最短路到1,因为这个过程是不会经历重边的(如果经历了就不是最短路了). 求最短路用SPFA,但常 ...

  6. ●BZOJ 3238 [Ahoi2013]差异

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3238 题解: 后缀数组套路深. 问题转化为求出任意两个后缀的LCP之和 在计算贡献时,各种不 ...

  7. JVM学习记录-对象已死吗

    前言 先来回顾一下,在jvm运行时数据区,分为两部分,一个部分是线程共享区,主要包括堆和方法区,另一部是线程私有区分包括本地方法栈,虚拟机栈和程序计数器.在线程私有部分的三个区域是随着线程生和灭的.栈 ...

  8. 笔记10 在XML中声明切面(1)

    1.无注解的Audience package XMLconcert; public class Audience { public void silenceCellPhones() { System. ...

  9. JVM基础

    1.基础 JDK  将java文件编译成class文件 JRE   包含JVM JVM可以进行内存管理 利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(j ...

  10. gulp填坑记(二)——gulp多张图片自动合成雪碧图

    为优化图片,减少请求会把拿到切好的图标图片,通过ps(或者其他工具)把图片合并到一张图里面,再通过css定位把对于的样式写出来引用的html里面,对于一些图片较多的项目,这个过程可能要花费我们一天的时 ...