基础大杂烩 -- 目录

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

1.输入并查找

  方案:头插法,正向查找第m个元素。

import java.util.Scanner;
 
public class Main {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            ListNode node = new ListNode();
            node.next = null;
            int N = in.nextInt();
             
            for (int i = 0; i < N; i++) {
                ListNode p = new ListNode();
                int x = in.nextInt();
                p.next = node.next;
                p.data = x;
                node.next = p;
            }
            int k = in.nextInt();
            ListNode kthNode = getKthNode(node,k);
            System.out.println(kthNode.data);
        }
    }
     
    public static ListNode getKthNode(ListNode node,int k){
        ListNode front = node,behind = node;
        int x=0;
        while(front.next!=null && x<=k){
            x++;
            front = front.next;
        }
        return front;
    }
}
 
class ListNode {
    public int data;
    public ListNode next;
}

2.指定单向链表并查找倒数第m个元素

  两种情况:无环、有环

    无环方案:因为无环单向链表最后一个元素next一定为null,因此设置两个指针slow = head ,fast = head + m,当fast.next == null时slow.next恰好是倒数第m个元素。

    有环方案:查找连接点,分割成无环单向链表,最后一个元素next一定为连接点join,将最后一个元素next --> null,此时用无环方案即可解决。因此设置连个指针slow = head ,fast = head + m,当fast.next == null时slow.next恰好是倒数第m个元素。

  无环方案Class :

package limeMianShi.link;

public class Test01 {

    public static void main(String[] args) {
ListNode head = new ListNode(0);
ListNode p = head;
for (int i = 1; i <= 10; i++) {
ListNode node = new ListNode(i);
p.next = node;
p = node; }
printListNode(head);
printKElement(head,3);
} private static void printKElement(ListNode head, int m) {
if(m == 0){
System.out.println("null");
}
ListNode p = head;
if(m > 0){
for(int i = 0;i < m;i++){
if(i == m - 1){
System.out.println("正数第" + m + "个元素为: " + p.data);
}
p = p.next;
}
}else{
ListNode s = head;
for(int i = 0;i < -m;i++){
p = p.next;
}
while(null != p){
s = s.next;
p = p.next;
}
System.out.println("倒数第" + (-m) + "个元素为: " + s.data);
}
} private static void printListNode(ListNode head) {
if (null != head) {
System.out.print(head.data + " --> ");
printListNode(head.next);
}else{
System.out.println("null");
}
}
} class ListNode { public int data;
public ListNode next; public ListNode() {
super();
} public ListNode(int data) {
this.data = data;
}
}

  有环方案Class :

package limeMianShi.link;

public class Test02 {

    public static void main(String[] args) {
ListNode head = new ListNode(0);
ListNode p = head;
ListNode p4 = null;
for (int i = 1; i <= 10; i++) {
ListNode node = new ListNode(i);
p.next = node;
p = node;
if (i == 4) {
p4 = node;
}
}
p.next = p4;
pullLoop(head);
printListNode(head);
for (int i = 1; i < 11; i++) {
printKElement(head, -i);
}
} private static void printListNode(ListNode head) {
if (null != head) {
System.out.print(head.data + " --> ");
printListNode(head.next);
} else {
System.out.println("null");
}
} private static void printKElement(ListNode head, int m) {
if (m == 0) {
System.out.println("null");
}
ListNode p = head;
if (m > 0) {
for (int i = 0; i < m; i++) {
if (i == m - 1) {
System.out.println("正数第" + m + "个元素为: " + p.data);
}
p = p.next;
}
} else {
ListNode s = head;
for (int i = 0; i < -m; i++) {
p = p.next;
}
while (null != p) {
s = s.next;
p = p.next;
}
System.out.println("倒数第" + (-m) + "个元素为: " + s.data);
}
} private static void pullLoop(ListNode head) {
ListNode p = getP(head);
ListNode pre = null;
while (head != p) {
pre = p;
head = head.next;
p = p.next;
}
pre.next = null;
} private static ListNode getP(ListNode head) {
ListNode solw = head.next;
ListNode fast = head.next.next;
while (solw != fast) {
solw = solw.next;
fast = fast.next.next;
}
return solw;
}
} class ListNode {
public int data;
public ListNode next; public ListNode() {
} public ListNode(int data) {
this.data = data;
}
}

啦啦啦

大杂烩 -- 查找单向链表倒数第m个元素的更多相关文章

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

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

  2. 求链表倒数第n个元素

    提示:设置一前一后两个指针,一个指针步长为1,另一个指针步长为n,当一个指针走到链表尾端时, 另一指针指向的元素即为链表倒数第n个元素. #include <stdio.h> #inclu ...

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

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

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

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

  5. C#学习单向链表和接口 IList<T>

    C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...

  6. 输出单向链表中倒数第k个结点

    描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int       m_nKey; ListNode* ...

  7. 输入一个单向链表,输出该链表中倒数第K个结点

    输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...

  8. 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点

    第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...

  9. 寻找单向链表的倒数第k个节点

    题目: 输入一个单向链表,输出这个单向链表的倒数第k个节点 template<class T> class ListNode { public: T Data; ListNode<T ...

随机推荐

  1. Android HttpURLConnection.connect找不到源 HttpURLConnection连接失败 HttpURLConnection.connect IO异常 解决办法

    Android HttpURLConnection.connect找不到源  HttpURLConnection连接失败 HttpURLConnection.connect IO异常 解决办法 以下代 ...

  2. JTAG 引脚自动识别 JTAG Finder, JTAG Pinout Tool, JTAG Pin Finder, JTAG pinout detector, JTAGULATOR, Easy-JTAG, JTAG Enumeration

    JTAG Finder Figuring out the JTAG Pinouts on a Device is usually the most time-consuming and frustra ...

  3. ${pageContext.request.contextPath}无法解析

    摘要 突然出现无法解析${pageContext.request.contextPath}的问题,在点击<a href="${pageContext.request.contextPa ...

  4. C# ConcurrentStack实现

    我们通过C# Queue 和Stack的实现知道Stack是依靠数组实现的,那么ConcurrentStack的栈又是如何实现的了,然后它的线程安全又是怎么做到的了? 来看看其code吧 public ...

  5. Java 对字符串数据进行MD5/SHA1哈希散列运算

    Java对字符串数据进行MD5/SHA1哈希散列运算 [java] view plain copy package cn.aibo.test; import java.security.Message ...

  6. linux网络设备—mdio总线

    一.结构体 struct mii_bus { const char *name; //总线名 char id[MII_BUS_ID_SIZE]; //id void *priv; //私有数据 int ...

  7. python3用BeautifulSoup抓取图片地址

    # -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #抓取图片地址 from bs4 i ...

  8. 解决《UNIX环境高级编程》(APUE)示例代码的编译问题

    转自 http://cunsheng.sinaapp.com/?p=360 APUE中示例很多, 把这些源码拿来跑跑调调对学习理解有着莫大的帮助, 随书网站就提供了源码下载, 不过我自己在Linux和 ...

  9. ubuntu安装odbc及(mysql驱动)

    一.安装odbc apt-get install unixodbc 如果需要用到编译的头文件之类的 apt-get install unixodbc-dev 二.安装mysql驱动 apt-get i ...

  10. JS 引擎执行机制

    JS JS 是单线程语音 JS 的 Event Loop 是 JS 的执行机制.类似于 Android Handler 消息分发机制 JS 单线程 技术的出现都跟现实世界里的应用场景密切相关 JS 单 ...