• 反转链表


    反转链表

    题目描述

    输入一个链表,反转链表后,输出新链表的表头。

    才发现牛客网链表没表头, 哭死,

    递归太漂亮了(来自牛客), 忍不住提到版本一(按照先后顺序应该是版本二),

    版一: 首先递归到最后一个元素并返回, 返回方式目前见到有点新意以后每次都返回这个指针(递归没有用到它, 却还能返回), 到最后一个元素时返回, 返回后的pHead指向倒数第二个元素, 把使倒数第二个元素的下一个元素指向当前元素, 令当前元素的next为null, 此后一次出栈, 同时最后一个出栈元素的next值为null, 太漂亮了

    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
            if ((NULL == pHead) || (NULL == pHead->next)) {
                return pHead;
            }
            
            ListNode* ret = ReverseList(pHead->next);
            
            pHead->next->next = pHead;
            pHead->next = NULL;
            
            return ret;
        }
    };
    

    版本一: 三个指针来回交换, 由于要交换顺序, 别忘记第一个元素的next设置为null

    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
            if ((NULL == pHead) || (NULL == pHead->next)) {
                return pHead;
            }
            
            ListNode *index1 = pHead->next;
            ListNode *index2 = pHead->next;
            ListNode *index3 = pHead;
            
            while (NULL != index1) {
                index1 = index2->next;
                index2->next = index3;
                if (index3 == pHead) {
                     index3->next = NULL;   
                }
                index3 = index2;
                index2 = index1;
            }
            
            return index3;
        }
    };
    
    /*
    struct ListNode {
    	int val;
    	struct ListNode *next;
    	ListNode(int x) :
    			val(x), next(NULL) {
    	}
    };*/
    
  • 相关阅读:
    Sql inner join
    转:MySQL 的show processlist
    session cookie
    集群和分布式
    设计模式
    Web性能优化——缓存
    关于 java 里面的路径
    1分钟看懂log4j 配置自己想要的日志信息
    spring @bean 的理解
    如何用iptables实现NAT(转)
  • 原文地址:https://www.cnblogs.com/hesper/p/10440556.html
Copyright © 2020-2023  润新知