• 代码题(4)— 反转链表、二叉搜索树与双向链表


    1、题目:反转一个单链表。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL
    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
            if(pHead == nullptr || pHead->next == nullptr)
                return pHead;
            ListNode* cur = pHead;
            ListNode *pre = nullptr, *nex = nullptr;
            while(cur != nullptr)
            {
                nex = cur->next;
                cur->next = pre;
                pre = cur;
                cur = nex;
                
            }
            return pre;
        }
    };

    2、 二叉搜索树与双向链表

     输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

    class Solution {
    public:
        TreeNode* Convert(TreeNode* pRoot)
        {
            //递归
            //判断边界
            if(pRoot==nullptr)
                return pRoot;
            if(pRoot->left==nullptr && pRoot->right==nullptr)
                return pRoot;
            // 1.将左子树构造成双链表,并返回链表头节点
            TreeNode *left=Convert(pRoot->left);
            // 2.定位至左子树双链表最后一个节点
            TreeNode *p=left;
            while(p!=nullptr && p->right!=nullptr)
                p=p->right;
            // 3.如果左子树链表不为空的话,将当前root追加到左子树链表。
            if(left!=nullptr)
            {
                p->right=pRoot;
                pRoot->left=p;
            }
            // 4.将右子树构造成双链表,并返回链表头节点
            TreeNode *right=Convert(pRoot->right);
            // 5.如果右子树链表不为空的话,将该链表追加到root节点之后
            if(right!=nullptr)
            {
                pRoot->right=right;
                right->left=pRoot;
            }
            // 6.根据左子树链表是否为空确定返回的节点。
            return left!=nullptr?left:pRoot;
        }
    };
  • 相关阅读:
    53、Gif 控件GifView 的使用,播放gif图片
    52、图片缩放库 PhotoView
    51、自定义View基础和原理
    Adapter适配器 final int Id 导致选中的Item不在当前界面
    Linux目录结构
    Linux包管理工具分析
    Linux 软件包安装管理
    MySQL配置详解
    MySQL 5.5.x配置文件详解
    Linux Apache2 配置介绍
  • 原文地址:https://www.cnblogs.com/eilearn/p/9206241.html
Copyright © 2020-2023  润新知