每天一算法(输出链表倒数第k个元素)
来源:互联网 发布:淘宝的发票在哪里申请 编辑:程序博客网 时间:2024/05/29 14:00
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
思路:
题目要求输出链表倒数第K个节点,那我们就把链表反转,输出第K个节点的值就可以了。
/*-----------------------------Copyright by yuucyf. 2011.05.08------------------------------*/#include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;template <class T>struct S_ListNode{ T m_nKey; S_ListNode* m_pNext; S_ListNode() { m_pNext = NULL; }};template <class T>S_ListNode<T>* ReverseList(S_ListNode<T>* psHead){ if (!psHead || !(psHead->m_pNext)) return psHead; S_ListNode<T>* psPrev = NULL; while (psHead) { S_ListNode<T> * psTemp = psHead; psHead = psHead->m_pNext; psTemp->m_pNext = psPrev; psPrev = psTemp; } return psPrev;}template <class T>void BuildSList(S_ListNode<T>* &psRet, int nSize){assert(nSize > 0);S_ListNode<T>* psHead = new S_ListNode<T>;assert(NULL != psHead);psHead->m_nKey = nSize;psRet = psHead;while (--nSize){S_ListNode<T> *psTemp = new S_ListNode<T>;assert(NULL != psTemp);psTemp->m_nKey = nSize;psHead->m_pNext = psTemp;psHead = psHead->m_pNext;}}template <class T>void OutputNodeValue(int nK, const S_ListNode<T> *psHead){int nIndex = nK;while (nIndex-- && psHead){psHead = psHead->m_pNext;}if (psHead)cout << "链表倒数第" << nK << "个数为" << psHead->m_nKey << endl ;}int _tmain(int argc, _TCHAR* argv[]){S_ListNode<int> *psHead = NULL;BuildSList(psHead, 10);psHead = ReverseList(psHead);OutputNodeValue(2, psHead);return 0;}
别人有用递归算法进行的逆排序。
/*-----------------------------Copyright by leeyunce. Modified by yuucyf . 2011.05.08------------------------------*/template<typename T>S_ListNode<T>* ReverseListRecursive(S_ListNode<T>* psHead){ if (!psHead|| !(psHead->m_pNext)) return psHead; S_ListNode<T>* psRet = ReverseListRecursive(psHead->m_pNext); psHead->m_pNext->m_pNext = psHead; psHead->m_pNext = NULL; return psRet;}
- 每天一算法(输出链表倒数第k个元素)
- 每天学习一算法系列(13) (输入一个单向链表,输出该链表中倒数第k个结点)
- 输出链表倒数第k个元素
- 输出单向链表的倒数第K个元素
- 链表的倒数第k个元素(mark)
- 剑指offer --反向输出链表与输出链表的倒数第k个元素
- 找出链表倒数第 n 个元素(算法)
- 算法(一)求链表中的倒数第K 个结点
- 每天一个算法之链表中倒数第K个结点
- 查找链表的倒数第k个元素
- 【100题】找出链表倒数第k个元素
- Interview----链表的倒数第K个元素
- 如何找到链表的倒数第k个元素
- 算法学习-----输出链表的倒数第k个节点
- 输出单向链表倒数第k个节点,倒数第0个指向尾节点.
- 输出链表倒数第K个结点
- 输出链表的倒数第k个节点
- 输出链表倒数第K个节点
- TCP-UDP Socket
- 2叉树排序
- mysql 从一个表中查数据,插入另一个表。。
- AspxGridView 获取行数
- Android 根据url地址显示图片
- 每天一算法(输出链表倒数第k个元素)
- Linux系统中添加sudoers
- SQL自增字段的相关总结-(主要SqlServe,Oracle)
- 一篇关于校园的爱情故事:伤感
- java 中的override & overload 比较
- iOS开发:推送通知简述及开发实践
- SQL,PL/SQL 数据类型一览表
- Comsenz 核心产品 Discuz! X2.5 正式版.【更新于 20120518】
- 玩转电脑常识篇章一