• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C++算法输出链表倒数第k个元素

OC/C/C++ 水墨上仙 1476次浏览

C++算法输出链表倒数第k个元素

链表结点定义如下:&nbsp&nbsp

struct ListNode
{
  int m_nKey;
  ListNode* m_pNext;
};
/*-----------------------------
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;
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C++算法输出链表倒数第k个元素
喜欢 (0)
加载中……