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

[剑指offer][面试题16]反转链表

2013-10-12 15:43 549 查看
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

#include <iostream>
using namespace std;

struct Node{
int   m_Data;
Node *m_pNext;
};

Node* reverseList(Node *pHead)
{
if (pHead==NULL){
return NULL;
}

if (pHead->m_pNext==NULL){
return pHead;
}

Node *pPrev = pHead;
Node *pCurr = pHead->m_pNext;
Node *pNext = NULL;
pPrev->m_pNext = NULL;
while (pCurr){
pNext = pCurr->m_pNext;
pCurr->m_pNext = pPrev;
pPrev = pCurr;
pCurr = pNext;
}

return pPrev;
}

void printList(Node *pHead)
{
bool bEmpty = true;

while (pHead){
bEmpty = false;
cout<<pHead->m_Data<<"->";
pHead = pHead->m_pNext;
}

if (!bEmpty){
cout<<"NULL"<<endl;
}
}

int main()
{
Node nodeA5 = {1, NULL};
Node nodeA4 = {2, &nodeA5};
Node nodeA3 = {3, &nodeA4};
Node nodeA2 = {4, &nodeA3};
Node nodeA1 = {5, &nodeA2};
Node nodeA0 = {6, &nodeA1};
Node *pHeadA = &nodeA0;

cout<<"Linked List: "<<endl;
printList(pHeadA);

pHeadA = reverseList(pHeadA);
cout<<"Reversed List: "<<endl;
printList(pHeadA);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: