題目:輸入一個單向鏈表,將該單鏈表逆置。
舉例:原來鏈表為1->2->3->4->5翻轉為5->4->3->2->1
鏈表結點定義如下:
struct ListNode { int m_nKey; ListNode* m_pNext; };
答:
#include "stdafx.h" #include <iostream> #include <fstream> using namespace std; struct ListNode { int m_nKey; ListNode* m_pNext; }; //構造鏈表 void CreateList(ListNode *&pHead) { fstream fin("list.txt"); ListNode *pNode = NULL; ListNode *pTmp = NULL; int data; fin>>data; while (data) { pNode = new ListNode; pNode->m_nKey = data; pNode->m_pNext = NULL; if (NULL == pHead) { pHead = pNode; pTmp = pNode; } else { pTmp->m_pNext = pNode; pTmp = pNode; } fin>>data; } } //翻轉單鏈表 void ReverseLink(ListNode *&pHead) { if (NULL == pHead) { return; } ListNode *pNode = pHead; ListNode *Prev = NULL; ListNode *pNext = NULL; while (NULL != pNode) { pNext = pNode->m_pNext; if (NULL == pNext) { pHead = pNode; } pNode->m_pNext = Prev; Prev = pNode; pNode = pNext; } } void PrintList(ListNode *pHead) { if (NULL == pHead) { return; } ListNode *pNode = pHead; while (NULL != pNode) { cout<<pNode->m_nKey<<" "; pNode = pNode->m_pNext; } cout<<endl; } int _tmain(int argc, _TCHAR* argv[]) { ListNode *pHead = NULL; cout<<"原來的鏈表:"; CreateList(pHead); PrintList(pHead); ReverseLink(pHead); cout<<"翻轉的鏈表:"; PrintList(pHead); return 0; }
運行界面如下:

建造鏈表的list.txt文件如下:
12 11 10 9 8 7 6 5 4 3 2 1 0
