zoukankan      html  css  js  c++  java
  • 逆转单链表

    问题

    思路

    cur = pre->next;
    post = cur=>next;
    cur->next = pre;
    cur = post;

    代码 

    ListNode* reverseList(ListNode *root)
    {
        if (root == NULL)
            return root;
        ListNode *cur = root;
        ListNode *pre = NULL;
        ListNode *post = NULL;
        ListNode *revRoot = NULL;
        while (cur != NULL)
        {
            post = cur->next;
            if (post == NULL)
                revRoot = cur;
            cur->next = pre;
            pre = cur;
            cur = post;
        }
        return revRoot;
    }

    完整执行

    #include <iostream>
    using namespace std;
    struct ListNode
    {
        int val;
        ListNode *next;
        ListNode(int v) : val(v), next(NULL) {}
    };
    
    ListNode* createList()
    {
        ListNode *root = new ListNode(0);
        ListNode *p1 = new ListNode(1);
        ListNode *p2 = new ListNode(2);
        ListNode *p3 = new ListNode(3);
        root->next = p1;
        p1->next = p2;
        p2->next = p3;
        return root;
    }
    
    ListNode* reverseList(ListNode *root)
    {
        if (root == NULL)
            return root;
        ListNode *cur = root;
        ListNode *pre = NULL;
        ListNode *post = NULL;
        ListNode *revRoot = NULL;
        while (cur != NULL)
        {
            post = cur->next;
            if (post == NULL)
                revRoot = cur;
            cur->next = pre;
            pre = cur;
            cur = post;
        }
        return revRoot;
    }
    
    void deleteList(ListNode *root)
    {
        ListNode *p = root;
        while(root != NULL)
        {
            p = root->next;
            delete(root);
            root = p;
        }
    }
    
    void tranverse(ListNode* root)
    {
        while(root != NULL)
        {
            cout << root->val << " ";
            root = root->next;
        }
        cout << endl;
    }
    
    int main()
    {
    
        ListNode *root = createList();
    
        tranverse(root);
        root = reverseList(root);
        tranverse(root);
         
        deleteList(root);
    }
    View Code

    结果

    0 1 2 3 
    3 2 1 0
  • 相关阅读:
    P1001 A+B Problem
    NOIP2015D1T2 信息传递
    海淀区赛游记。。。。
    P3375 【模板】KMP字符串匹配
    Print Article HDU
    BZOJ-2-4870: [Shoi2017]组合数问题 矩阵优化 DP
    BZOJ-1- 4868: [Shoi2017]期末考试-三分
    #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
    湖南大学第十四届ACM程序设计新生杯(重现赛)
    Codeforces Round #530 (Div. 2)
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3524888.html
Copyright © 2011-2022 走看看