反转链表

来源:互联网 发布:mac safari缓存文件 编辑:程序博客网 时间:2024/06/06 17:43

    问题:定义一个函数,输入一个链表的头结点,反转该链表并且输出反转后链表的头结点,链表的定义如下:

     struct ListNode

    {

       int   m_nKey;

       ListNode *m_pNext;

    };


详细的实现代码如下:

#include "stdafx.h"#include "..\Utilities\List.h"//反转链表,并且返回反转后链表的头结点ListNode* ReverseList(ListNode* pHead){    ListNode* pReversedHead = NULL;    ListNode* pNode = pHead;    ListNode* pPrev = NULL;    while(pNode != NULL)    {        ListNode* pNext = pNode->m_pNext;        if(pNext == NULL)            pReversedHead = pNode;        pNode->m_pNext = pPrev;        pPrev = pNode;        pNode = pNext;    }    return pReversedHead;}// ====================测试代码====================ListNode* Test(ListNode* pHead){    printf("The original list is: \n");    PrintList(pHead);    ListNode* pReversedHead = ReverseList(pHead);    printf("The reversed list is: \n");    PrintList(pReversedHead);    return pReversedHead;}// 输入的链表有多个结点void Test1(){    ListNode* pNode1 = CreateListNode(1);    ListNode* pNode2 = CreateListNode(2);    ListNode* pNode3 = CreateListNode(3);    ListNode* pNode4 = CreateListNode(4);    ListNode* pNode5 = CreateListNode(5);    ConnectListNodes(pNode1, pNode2);    ConnectListNodes(pNode2, pNode3);    ConnectListNodes(pNode3, pNode4);    ConnectListNodes(pNode4, pNode5);    ListNode* pReversedHead = Test(pNode1);    DestroyList(pReversedHead);}// 输入的链表只有一个结点void Test2(){    ListNode* pNode1 = CreateListNode(1);    ListNode* pReversedHead = Test(pNode1);    DestroyList(pReversedHead);}// 输入空链表void Test3(){    Test(NULL);}int _tmain(int argc, _TCHAR* argv[]){    Test1();    Test2();    Test3();    return 0;}

运行结果如下:


0 0
原创粉丝点击