首页 > 其他 > 详细

Leetcode刷题笔记—206. Reverse Linked List

时间:2019-07-29 21:34:48      阅读:165      评论:0      收藏:0      [点我收藏+]

一、问题

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解决

设置指向当前节点为cur,指向当前节点的下一个节点为next和指向当前节点的前一个节点pre

技术分享图片

 

 

技术分享图片

 

技术分享图片

 

技术分享图片

 

 

 

 

 

 

 

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* reverseList(ListNode* head) {
12         ListNode* pre=NULL;  
13         ListNode* cur=head;  // 声明个指针指向当前元素,初始指向head头节点
14         while(cur!=NULL){   // 如果当前节点元素不为空
15             ListNode* next=cur->next;  // 声明个next指针指向 当前节点的下一个节点
16             
17             cur->next=pre;   // 将 cur下一个节点指向 cur的前一个结点。实现反转
18             pre=cur;  // pre指针指向cur现在的位置
19             cur=next;  // cur 指向 next 指向的位置
20         }
21         return pre; // 循环结束后cur指向的是空结点,则cur的前一个节点则为反转后新的头节点
22         
23     }
24 };

 

时间复杂度O(n)。 只开了三个指针的控件,空间复杂度 O(1)

 

 

 

 

 

代码参考:https://github.com/liuyubobobo/Play-Leetcode

Leetcode刷题笔记—206. Reverse Linked List

原文:https://www.cnblogs.com/guo7533/p/11180703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!