zoukankan      html  css  js  c++  java
  • 《剑指offer》第二十四题(反转链表)

    // 面试题24:反转链表
    // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的
    // 头结点。
    
    #include <iostream>
    #include "List.h"
    
    ListNode* ReverseList(ListNode* pHead)
    {
        ListNode* pReversedHead = nullptr;//设置三个节点变量,第一是已经被反转的头节点(原链表尾节点)
        ListNode* pNode = pHead;//第二个是当前节点
        ListNode* pPrev = nullptr;//第三是原链表中当前节点的前一个节点
        while (pNode != nullptr)
        {
            ListNode* pNext = pNode->m_pNext;//pNext是原链表中当前节点的后一个节点
    
            if (pNext == nullptr)
                pReversedHead = pNode;
    
            pNode->m_pNext = pPrev;
    
            pPrev = pNode;
            pNode = pNext;
        }
    
        return pReversedHead;
    }
    
    // ====================测试代码====================
    ListNode* Test(ListNode* pHead)
    {
        printf("The original list is: 
    ");
        PrintList(pHead);
    
        ListNode* pReversedHead = ReverseList(pHead);
    
        printf("The reversed list is: 
    ");
        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(nullptr);
    }
    
    int main(int argc, char* argv[])
    {
        Test1();
        Test2();
        Test3();
        system("pause");
        return 0;
    }
  • 相关阅读:
    法正(25):劝降
    单例模式
    Redis学习笔记(六)---List
    canvas的使用
    HTML5的新特性
    html学习笔记一
    matlab无法使用
    Hadoop笔记(一)
    PL/SQL笔记(一)
    Oracle数据库(二)
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10489103.html
Copyright © 2011-2022 走看看