leetcode 206 反转链表

题目:
反转一个单链表

示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

题目分析

对一个单链表进行转置

方法说明

  • 迭代
  1. 在原链表之前增加一个空的指针newHead
    (不用申请新的结点)
  2. 从head开始 == 后一个结点移动到newHead后面
  3. 重复1,2直到head成为末节点

代码

class Solution {
     
public:
    ListNode* reverseList(ListNode* head) {
     
        ListNode *newHead = NULL;
        while (head) {
     
            ListNode *t = head->next;
            head->next = newHead;
            newHead = head;
            head = t;
        }
        return newHead;
    }
};
  • 递归
  1. head指向空或者指向最后一个结点 ==>直接返回
  2. 对head指向的下一个结点调用递归函数
  3. newHead指向最后一个结点
  4. head的下一个结点的next指向head本身 ==> 形成循环
  5. head的下一个结点指向空 ==> 相当于把head放到末尾

代码

class Solution {
     
public:
    ListNode* reverseList(ListNode* head) {
     
        if (!head || !head->next) return head;
        ListNode *newHead = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
};

你可能感兴趣的:(leetcode,算法,单链表,数据结构,leetcode,链表)