// test14.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<string>
#include<cctype>
#include <vector>
#include<exception>
#include <initializer_list>
#include<stack>
using namespace std; struct ListNode {
int val;
struct ListNode *next; ListNode(int x) :
val(x), next(NULL) {
}
}; class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
// ListNode temp(0);
int count=0;
ListNode *temp = pListHead; //注意,不能返回临时变量,因为临时变量的生存期只在此函数内 while (pListHead != NULL) //统计节点个数
{
++count;
pListHead = pListHead->next; }
count -= k;
pListHead = temp; //注意:要判断要找的节点是否在范围内,如果在范围内,返回节点;如果不在,返回NULL
if(count>=0)
{
while (count--) //从前往后再次搜索
{
pListHead = pListHead->next;
}
return pListHead;
}
else
return NULL; }
}; int main()
{
int num;
Solution so;
cout << "请输入头结点:" ;
cin >> num;
ListNode pListHead(num); ListNode listNodeCopy = pListHead; cout << "依次输入后面的元素:"; // 此段输入有问题,有待进一步讨论
while (cin>>num)
{
ListNode temp(num);
pListHead.next = &temp;
pListHead = temp;
if (temp.val == 4)
break;
}
pListHead = listNodeCopy; cout << "依次输出各个元素是:" << endl; while (&pListHead!=NULL)
{
cout << pListHead.val << " ";
pListHead = *pListHead.next;
} ListNode result = *(so.FindKthToTail(&pListHead, 1)); cout << "倒数第" <<1<<"个元素是:"<< result.val<<endl; return 0;
}
注意:1.本文所给的方法中,先遍历整个List,看有多少元素;再用总元素减去要求的倒数第k个元素的k;再遍历一下list直到遇到cout-k个元素,打印出来
2.还有一种比较聪明的方法,建立两个ListNode节点,第一个节点先走k步,第二个节点再开始走;当第一个节点走到末尾的时候,第二个节点整好会走到count-k的位置。

输入一个链表,输出该链表中倒数第k个结点。的更多相关文章

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

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

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

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

  3. 算法:输入一个链表,输出该链表中倒数第k个结点。

    算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...

  4. 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。

    一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...

  5. 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。

    1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...

  6. 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...

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

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

  8. [华为]输出单向链表中倒数第k个结点

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

  9. 输出单项链表中倒数第k个结点——牛客刷题

    题目描述: 输入一个单向链表,输出该链表中倒数第k个结点 输入.输出描述: 输入说明:1.链表结点个数 2.链表结点的值3.输入k的值 输出说明:第k个结点指针 题目分析: 假设链表长度为n,倒数第k ...

  10. 剑指offer四:链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第K个结点 public class ListNode { int val; ListNode next = null; ListNode(int val) { this ...

随机推荐

  1. JSP之错误信息提示

    MessageResource.properties配置文件: RegisterAction注册: package com.caiduping.action; import javax.servlet ...

  2. ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.

    需要在库程序包管理器里依次执行以下命令: 1.启用迁移功能:Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext 2.建立 ...

  3. 【Linux C中文函数手册】之 目录操作函数

    目录操作函数 1)closedir 关闭目录 相关函数: opendir表头文件: #include<sys/types.h> #include<dirent.h>定义函数: ...

  4. 济南学习 Day 2 T3 am

    [问题描述]m× m的方阵上有n棵葱,你要修一些栅栏把它们围起来.一个栅栏是一段沿着网格建造的封闭图形(即要围成一圈) .各个栅栏之间应该不相交.不重叠且互相不包含.如果你最多修k个栅栏,那么所有栅栏 ...

  5. nginx配置(解释)

  6. Windows 8.1 序列化与反序列化

    /// <summary> /// 对象序列化成 XML String /// </summary> public static void XmlSerialize<T& ...

  7. PHP 判断客户端请求是 Android 还是 IOS

    <?php if(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')||strpos($_SERVER['HTTP_USER_AGENT'], 'iPad ...

  8. JS 获取select(多选下拉)中所选值的示例代码

    通过js获取select(多选下拉)中所选值,具体实现如下,有需要的朋友可以参考下,希望对大家有所帮助 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  9. (转载)delphi文件流

    delphi文件流 [复制链接] 在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法. TStream类中定义的属性介绍如下: 1.Size: 此属性以字节返回流中 ...

  10. Sigma.js

    http://www.cnblogs.com/kingboy2008/p/6117741.html