type
Post
status
Published
date
Apr 18, 2023
slug
summary
给你单链表的头节点 head,请你反转链表,并返回反转后的链表。
tags
leetcode
c++
category
算法
icon
password

206. 反转链表

链接:

题解

1.递推或迭代

t是临时变量,指向未翻转的链表;p代表q的前一个节点。
notion image
开始状态p指向空,q指向第一个节点,t指向第一个节点的next节点。将链表从前往后翻转。

代码

class Solution { public: ListNode* reverseList(ListNode* head) { if(head == nullptr) return head; ListNode *p=nullptr; ListNode *q = head,*t = nullptr; while(q){ t=q->next; q->next = p; p=q; q=t; } return p; } };

2.递归

递归的思路和递推相反,递归需要从后向前处理。
假设当前链表都已经被翻转
此时需要让指向,因此可以得到 , 也就是让

代码

class Solution { public: ListNode* reverseList(ListNode* head) { if(!head|| !head->next) return head; ListNode *new_head = reverseList(head->next); head->next->next = head; head->next = nullptr; return new_head; } };
 
删除有序数组中的重复项136.只出现一次的数字