0
点赞
收藏
分享

微信扫一扫

PPT动画之每天一算:Reverse Linked List



PPT动画之每天一算:Reverse Linked List_递归

LeetCode上第206号问题:​​Reverse Linked List​​

反转一个单链表。

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

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

思路

设置三个节点​​pre​​​、​​cur​​​、​​next​

  • (1)每次查看​​cur​​​节点是否为​​NULL​​,如果是,则结束循环,获得结果
  • (2)如果​​cur​​​节点不是为​​NULL​​​,则先设置临时变量​​next​​​为​​cur​​的下一个节点
  • (3)让​​cur​​​的下一个节点变成指向​​pre​​​,而后​​pre​​​移动​​cur​​​,​​cur​​​移动到​​next​
  • (4)重复(1)(2)(3)

动画演示

动画演示GIF有点大,请稍微等待一下加载显示^_^



代码

迭代的方式处理



// 206. Reverse Linked List
// https://leetcode.com/problems/reverse-linked-list/description/
// 时间复杂度: O(n)
// 空间复杂度: O(1)
class Solution {
public:
ListNode* reverseList(ListNode* head) {

ListNode* pre = NULL;
ListNode* cur = head;
while(cur != NULL){
ListNode* next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}

return pre;
}
};



递归的方式处理



// 206. Reverse Linked List
// https://leetcode.com/problems/reverse-linked-list/description/
//
// 递归的方式反转链表
// 时间复杂度: O(n)
// 空间复杂度: O(1)
class Solution {
public:
ListNode* reverseList(ListNode* head) {

// 递归终止条件
if(head == NULL || head->next == NULL)
return head;

ListNode* rhead = reverseList(head->next);

// head->next此刻指向head后面的链表的尾节点
// head->next->next = head把head节点放在了尾部
head->next->next = head;
head->next = NULL;

return rhead;
}
};



执行结果



PPT动画之每天一算:Reverse Linked List_时间复杂度_02



PPT动画之每天一算:Reverse Linked List_反转链表_03



举报

相关推荐

0 条评论