《LeetCode之每日一题》:136.反转链表
Posted 是七喜呀!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:136.反转链表相关的知识,希望对你有一定的参考价值。
题目链接: 反转链表
有关题目
给你单链表的头节点 head ,请你反转链表,
并返回反转后的链表。
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
进阶:链表可以选用迭代或递归方式完成反转。
你能否用两种方法解决这道题?
题解
法一:迭代
代码一:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* newHead = nullptr;
ListNode* cur = head;
while(cur){
ListNode* temp = cur;
cur = cur->next;
temp->next = nullptr;
if (newHead == nullptr){
newHead = temp;
}
else {
temp->next = newHead;
newHead = temp;
}
}
return newHead;
}
};
时间复杂度:O(N)
空间复杂度:O(1)
代码二:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = head;
ListNode* p = nullptr;
while(cur){
ListNode* temp = cur->next;
cur->next = p;
p = cur;
cur = temp;
}
return p;
}
};
时间复杂度:O(N)
空间复杂度:O(1)
以上是关于《LeetCode之每日一题》:136.反转链表的主要内容,如果未能解决你的问题,请参考以下文章