输入一个链表,输出该链表中倒数第k个结点。
2016-10-12 17:11
369 查看
// 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个结点
- 输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个链表,输出该链表中倒数第k个结点
- 输入一个链表,输出该链表中倒数第k个结点
- 输入一个单向链表,输出该链表中倒数第K个结点
- 13 输入一个单向链表,输出该链表中倒数第k个结点
- 13.输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 面试题15:输入一个链表,输出该链表中倒数第k个结点。
- 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
- 数据结构——算法之(004)(输入一个单向链表,输出该链表中倒数第k个结点)
- 面试题15、输入一个链表,输出该链表中倒数第k个结点。
- 13输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- [java 面试100道]13.输入一个单向链表,输出该链表中倒数第k个结点。
- 输入一个单向链表,输出该链表中倒数第k个结点
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 13、输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个链表,输出该链表中倒数第k个结点。
- 11. 微软面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 剑指offer:输入一个链表,输出该链表中倒数第k个结点。
- 输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表 的尾指针