• 输入一个链表,输出该链表中倒数第k个结点。


    // 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的位置。
  • 相关阅读:
    .NET CORE 技术债
    .Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索
    托管ASP.NET Core应用程序到Windows服务中
    Office在线预览及PDF在线预览的实现方式大集合
    Ubuntu 16.10 虚拟机安装记录
    .Net Core 之 图形验证码
    Ubuntu之Mysql安装及基本设置
    .Net Core 之 Ubuntu 14.04 部署过程
    常用.net反编译替换正则表达式
    江湖救急:webbrowser中js文件丢失问题~
  • 原文地址:https://www.cnblogs.com/wdan2016/p/5953659.html
Copyright © 2020-2023  润新知