• 单向链表反转


    题目:已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)


    解答:
    我们假设单向链表的节点如下:
    单向链表反转template <typename T>
    单向链表反转
    class list_node
    单向链表反转单向链表反转
    单向链表反转{
    单向链表反转
    public:
    单向链表反转list_node 
    * next;
    单向链表反转data;
    单向链表反转}
    ;

    这个题目算是考察数据结构的最基础的题目了,有两种方法可以解此题:

    方法一:
    单向链表反转    void reverse(node*& head)
    单向链表反转单向链表反转    
    单向链表反转{
    单向链表反转        
    if (head == 0|| (head->next == 0return;// 边界检测
    单向链表反转
            node* pNext = 0;
    单向链表反转        node
    * pPrev = head;// 保存链表头节点
    单向链表反转
            node* pCur = head->next;// 获取当前节点
    单向链表反转
            while (pCur != 0)
    单向链表反转单向链表反转        
    单向链表反转{
    单向链表反转            pNext 
    = pCur->next;// 将下一个节点保存下来
    单向链表反转
                pCur->next = pPrev;// 将当前节点的下一节点置为前节点
    单向链表反转
                pPrev = pCur;// 将当前节点保存为前一节点
    单向链表反转
                pCur = pNext;// 将当前节点置为下一节点
    单向链表反转
            }
              head->next=pPrev;
    单向链表反转    }

    这是一般的方法,总之就是用了几个临时变量,然后遍历整个链表,将当前节点的下一节点置为前节点。


    方法二:
    单向链表反转    node* reverse( node* pNode, node*& head)
    单向链表反转单向链表反转    
    单向链表反转{
    单向链表反转        
    if (pNode == 0|| (pNode->next == 0// 递归跳出条件
    单向链表反转单向链表反转
            单向链表反转{
    单向链表反转            head 
    = pNode; // 将链表切断,否则会形成回环
    单向链表反转
                return pNode;
    单向链表反转        }

    单向链表反转
    单向链表反转        node
    * temp = reserve(pNode->next, head);// 递归
    单向链表反转
            temp->next = pNode;// 将下一节点置为当前节点,既前置节点
    单向链表反转
            return pNode;// 返回当前节点
    单向链表反转
        }
    这个方法是采用了递归算法,也就是在反转当前节点之前先反转其后继节点,说白了其实就是利用函数的调用堆栈构建了一个临时链表罢了,挺废的一个算法,权当作是写着好玩,没有什么实在的意义。
    采用此算法需要注意的是,头结点必须要传入的是引用,因为在递归跳出的时候要切断链表,否则链表将会形成一个回环。
  • 相关阅读:
    php method_exists( $object , string $method_name )
    php伪类型 (mixed)
    6.6-2-数组与数据结构(用数组及其函数实现堆栈等数据结构)
    6.6-1-php数组相关(2)
    2017.6.5-2-php数组相关(1)
    2017.6.5-1-php函数应用及流程控制
    CodePage
    bat批处理教程
    pip安装及源
    CentOS安装Python3
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6521226.html
Copyright © 2020-2023  润新知