LeetCode 206. Reverse Linked List

206. Reverse Linked List

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?
链接列表可以反复或递归地反转。 你能同时实施吗?

Accepted
550.9K
Submissions
1M

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *new_head=NULL;    //指向新链表头结点的指针
        while(head){
            ListNode *next=head->next;  //备份head->next
            head->next=new_head;        //更新head->next
            new_head=head;              //移动new_head
            head=next;      //遍历链表
        }
        return new_head;    //返回新链表头节点
    }
};

分析

要将一个链表逆向,先声明一个指向新链表头节点的指针,从旧链表的头开始遍历,一直到旧链表的尾。
声明一个指针指向旧链表的头指针指向的节点,将其备份下来;
然后让旧链表的头指针指向的节点等于新链表头节点的指针,(一开始为NULL);
之后新链表的头指针指向旧链表的头指针,旧链表的头指针指向旧链表的下一个节点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原文地址:https://www.cnblogs.com/AlexKing007/p/12338472.html