单链表逆置

来源:互联网 发布:全站仪怎么导出数据 编辑:程序博客网 时间:2024/05/16 15:08

单链表逆置

题目:输入一个单向链表,将该单链表逆置。

举例:原来链表为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
分类: 算法面试
0 0
原创粉丝点击