首页 > 作文

206. 反转链表

更新时间:2023-04-03 20:50:59 阅读: 评论:0

描述

反转一个单链表。

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

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

思路1:双指针法(迭代)

设置一个临时结点指针tmp,用于保存当前结点改变指向后断开后的列表化工专业排名首元素,一前一后双指针,从头到尾移动。此方法简单。

解答1

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { public:    ListNode* reverList(ListNode* head) {         if(head == NULL || head->next == NULL) return head;        ListNode* tmp;        ListNode* pr性感女人e = NULL;        ListNode* curr = head;//current代替head        while(curr){             tmp = tmp->next;   //保存下一个节点             curr->next = pre;            pre = curr;            curr = tmp;        }        return pre;    }};

思路2:递归法

不得不说,这个方法太难理解了,只看代码绞尽脑汁我都想不出来过程…
推荐去LeetCode题解看此人的ppt,有递归的详细过程。
这里要注意两点:
(1)假设链表[1,2,3,4,5],最终触发第一行返回代码时,r湖北著名景点everList()函数返回的head是5,赋值给curr,后面每次返回的curr都是head=5这个结点。
(2)head->next->next这句,因为第5层(共5层)函数返回后,当前在第4层函数,当前head是4,所以head->next->next5->nexthead->next置空防止链表更改指向后出现循环。

解答2

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */创建文明城市内容class Solution { public:    ListNode* reverList(ListNode* head) {         if(head == NULL || head->next == NULL) return head;        ListNode* curr = reverList(head->next);//curr保存终结点        head->next->next = head;        head->next = NULL;        return curr;    }};

本文地址:https://blog.csdn.net/mbytes/article/details/109237567

本文发布于:2023-04-03 20:50:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/96584f19fc1b860779b4f787c97adb87.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:206. 反转链表.doc

本文 PDF 下载地址:206. 反转链表.pdf

标签:递归   结点   链表   指针
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图