206. Reverse Linked List【力扣】

题意理解

翻转单链表

问题分析

思路是设置两个指针,一个是新链表头,一个是旧链表头。首先判断链表为空,直接返回空;然后设置新链表初始节点,接着循环旧链表节点,如果旧链表节点不空,先用next保留后续节点,再将旧链表节点连接上新链表头,然后将新链表头移动到旧链表头上(目的是插到新链表最前面),旧头结点再指向之前保留的后续节点next。

其他

参考

https://gitee.com/xiexie1357/STLearn/blob/master/STLport-5.2.1/stlport/stl/_slist_base.c

__reverse方法实现

链接

    ListNode* reverseList(ListNode* head) {
        if (!head)    //链表为空
            return NULL; //返回空
        ListNode* result = head;    //新头结点指向当前结点
        head = head -> next;    //原头结点后移
        result -> next = NULL;    //新头结点后继设置为空(变成尾结点)
        while(head)    //原头结点不空
        {
            ListNode* next = head -> next;    //保存后续结点
            head->next = result;    //旧头节点连接上新头节点
            result = head;    //新头节点指向旧头节点
            head = next;    //旧头节点指向之前保存的后继结点
        }
        return result;    //返回新头节点
    }

猜你喜欢

转载自blog.csdn.net/xiexie1357/article/details/88134090