您的位置:首页 > 职场人生

面试题14:反转链表

2013-07-21 15:11 387 查看


代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};

ListNode *ReverseList(ListNode *pListHead)
{
if (pListHead == NULL)
{
return NULL;
}

ListNode *pReverseHead = NULL;
ListNode *pPre = NULL;
ListNode *pNode = pListHead;
ListNode *pNext = NULL;

while (pNode != NULL)
{
pNext = pNode->m_pNext;
if (pNext == NULL)
{
pReverseHead = pNode;
}
pNode->m_pNext = pPre;
pPre = pNode;
pNode = pNext;
}
return pReverseHead;
}

//创建一个链表,输入从头到尾结点的值,输入-1表示结束
void CreateList(ListNode *& pHead)
{
ListNode *pListNode = NULL;
ListNode *pCurLastNode = NULL;
bool isHead = true;

while (1)
{
if (isHead)
{
pHead = new ListNode();
cin >> pHead->m_nValue;
pHead->m_pNext = NULL;
isHead = false;
pCurLastNode = pHead;
}
else
{
pListNode = new ListNode();
cin >> pListNode->m_nValue;
if (pListNode->m_nValue == -1)
{
break;
}
pListNode->m_pNext = NULL;
pCurLastNode->m_pNext = pListNode;
pCurLastNode = pListNode;
}
}
}

//从头到尾打印链表
void PrintList(ListNode *&pHead)
{
if (pHead != NULL)
{
ListNode *pCur = pHead;
while (pCur != NULL)
{
cout << pCur->m_nValue << " ";
pCur = pCur->m_pNext;
}
cout << endl;
}
else
{
cout << "链表为空!" << endl;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
ListNode *pListHead = NULL;
CreateList(pListHead);
PrintList(pListHead);
ListNode *pReverseHead = ReverseList(pListHead);
cout << pReverseHead->m_nValue << endl;
PrintList(pReverseHead);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: