找出链表倒数第n个节点元素的二个方法_java

方法一:利用两个指针p,q,首先将q往链表尾部移动n位,然后再将p、q一起往后移,那么当q达到链表尾部时,p即指向链表的倒数第n个节点。

复制代码 代码如下:

node* find_nth_to_last(node* head,int n) { if(head==NULL || n<1) return NULL; node*p,*q; p=q=head; while(q!=NULL && n--){ q=q->next; } if(n>=0) return NULL; while(p!=NULL && q!=NULL){ p=p->next; q=q->next; } return p; }

方法二:可以先计算出节点个数,即从头到尾遍历一次链表,得到个数m,那么倒数第n个元素也即第m-n+1个元素.与方法一是同样的思维,只是具体操作方式不同,代码略.
JAVA代码:

复制代码 代码如下:

LinkedListNode nthToLast(LinkedListNode head, int n) { if (head == null || n < 1) { return null; } LinkedListNode p1 = head; LinkedListNode p2 = head; for (int j = 0; j < n - 1; ++j) { // skip n-1 steps ahead if (p2 == null) { return null; // not found since list size < n } p2 = p2.next; } while (p2.next != null) { p1 = p1.next; p2 = p2.next; } return p1; }

时间: 2024-10-22 22:31:30

找出链表倒数第n个节点元素的二个方法_java的相关文章

java 集合问题找出两个集合中相同的元素并打印出来

问题描述 java 集合问题找出两个集合中相同的元素并打印出来 把1-100 数随机放入到 数组长度为[97] 并且这些元素不能重复,找出未输入进数组的数! 解决方案 package set; import java.util.HashSet; /* 作业: 把1-100 数随机不重复放入到 数组[97] ,找出未存入的数! */ public class Test5 { public static void main(String[] args) { // 1.创建 一个 HashSet集合,

《Python Cookbook(第3版)中文版》——1.12 找出序列中出现次数最多的元素

1.12 找出序列中出现次数最多的元素 1.12.1 问题 我们有一个元素序列,想知道在序列中出现次数最多的元素是什么. 1.12.2 解决方案 collections模块中的Counter类正是为此类问题所设计的.它甚至有一个非常方便的most_common()方法可以直接告诉我们答案. 为了说明用法,假设有一个列表,列表中是一系列的单词,我们想找出哪些单词出现的最为频繁.下面是我们的做法: words = [ 'look', 'into', 'my', 'eyes', 'look', 'in

5个找出Linux中“二进制命令”描述和系统中位置的方法

在数千个 Linux 系统上的命令/程序中,知道给定命令的类型和目的以及其在系统上的位置(绝对路径)对于新手来说可能是一个挑战. 知道命令/程序的一些细节不仅有助于 Linux 用户掌握大量命令,还能使用户理解命令行或脚本在系统上的操作. 因此,在本文中我们将向你解释五个有用的命令,用于显示给定命令的简短描述和位置. 要在系统上发现新命令,请查看 PATH 环境变量中的所有目录.这些目录存储系统上安装的所有命令/程序. 一旦你找到一个有趣的命令,在继续阅读更多关于它的手册页之前,请尝试如下收集一

C语言实现输出链表中倒数第k个节点_C 语言

本文实例展示了C++实现输出链表中倒数第k个节点的方法,分享给大家供大家参考之用. 运行本文所述实例可实现输入一个单向链表,输出该链表中倒数第k个节点. 具体实现方法如下: /* * Copyright (c) 2011 alexingcool. All Rights Reserved. */ #include <iostream> using namespace std; int array[] = {5, 7, 6, 9, 11, 10, 8}; const int size = size

输入n个整数并找出其中的最小k个数

题目: 输入n个整数, 找出其中的最小k个数. 使用快速排序(Quick Sort)的方法求解, 把索引值(index)指向前k个数. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int RandomInRange(int min, int max) { int rand

找出单向链表的倒数第m个元素

链表节点: class Node{public:    int        data;    Node*    next;public:    Node(int n) : data(n), next(0)    {    }    Node() : data(0), next(0)    {    }    Node* InsertAfter( int _data )    {        Node* newnode = new Node(_data);        newnode->ne

剑指offer系列之十三:链表中的倒数第k个节点

题目描述 输入一个链表,输出该链表中倒数第k个结点. 举一个简单的例子,比如链表{1,2,3,4,5},如果要返回倒数第二个节点,也就是k=2,就相当于正数第5-k+1=4个节点,所以我们可以采用两次循环:一次循环得到链表的结点个数:另一次循环则是从链表中找到第n-k+1个节点.虽然是两次循环,但时间复杂度是O(n),需要注意的是,这里仍然需要对链表的边界条件进行判断.基于这种思路写出如下代码: public ListNode FindKthToTail(ListNode head,int k)

判断单链是否循环,并且找出第一个循环节点

介绍     判断单链是否循环,并且找出第一个循环节点. 思路     [判断单链是否循环]:如果单链是循环的,那么循环部分就是封闭的.这好比一个田径运动场,当两个人跑步时,开始虽然有一定的间距,但他们迟早会相遇的. 顺其自然的我们从中抽取一个数学模型,一个是步长Steps(对应两人刚开始跑步时的间距):一个是判断单链循环的条件nodeX==nodeY(两人"相遇").     [找出第一个循环节点]:我想过好多其它方法,实现起来都比较难,后来出去骑行了两个小时,回来后就想到借助Has

javascript-js获取table中的子节点,样式为text的值,数据全部找出,但是多了个undefined,求解

问题描述 js获取table中的子节点,样式为text的值,数据全部找出,但是多了个undefined,求解 <form> <p>1.批量提交数据</p> <div> <input type="button" value="增加产品" onclick="addRowTwo();" /> </div> </br> <div> <table id=&