leetcode(三十六)反转链表
2021/10/20 23:16:09
本文主要是介绍leetcode(三十六)反转链表,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
方法一:使用栈,注意,在每次出栈将指针指向出栈的元素,然后将指针指向自己的next之后,一定要注意再将指针的next为NULL,否则会报错。
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode * hd = new ListNode; stack<ListNode*> array; while(head!=nullptr) { array.push(head); head = head ->next; } ListNode * temp1 = hd; while(!array.empty()) { hd->next = array.top(); array.pop(); hd = hd->next; hd->next = nullptr; } return temp1->next; } };
方法二:
迭代,简单思想就是,初始化两个指针,一个指向头节点,一个指向null,也即一个在前一个在后,然后每次先存一下前面结点的next,然后把后面结点的值给前面结点的next,然后将前面结点的位置传给后面结点(向后移动),然后把刚刚存下的前面结点的next传给前面结点(向后移动)
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *pre = head; ListNode *cur = nullptr; while(pre) { ListNode *temp = pre->next; pre->next = cur; cur = pre; pre = temp; } return cur; } };
方法三:递归
递归版本稍微复杂一些,其关键在于反向工作。假设链表的其余部分已经被反转,现在应该如何反转它前面的部分?
答:让k+1的next指向k,操作就是k=k->next->next,并且应让k->next指向null,佛祖额链表中可能会产生环。
class Solution { public: ListNode* reverseList(ListNode* head) { if(!head||!head->next) return head; ListNode *NewHead = reverseList(head->next); head->next->next = head; head->next=nullptr; return NewHead; } };
这篇关于leetcode(三十六)反转链表的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享