翻转链表

xiaoxiao2021-02-28  49

描述:翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 思路:刚开始不是很懂,后面参考网上,也不是很理解。后来在论坛求助,感谢论坛里面大神@qq_36782456@ccssddnn218的帮助!

class Solution { public: /** * @param head: The first node of linked list. * @return: The new head of reversed linked list. */ ListNode *reverse(ListNode *head) { ListNode *prev = NULL; while (head != NULL) { ListNode *temp = head->next; head->next = prev; prev = head; head = temp; } return prev; } };

[quote=引用 2 楼 qq_36782456 的回复:] 这个应该很好理解吧 就是链表的回指 假如 1—>2—>3—>4—>null 首先让null<—1 再次循环 null<—1<—2 接着循环 null<—1<—2<—3 null<—1<—2<—3<—4 返回 4的节点,就是prev。[/quote]

[quote=引用 1 楼 ccssddnn218 的回复:] [code=c]//交换前 +------------+ +-------------+ +-------------+ |node1 | | node2 | | node3 | |data | | data | | data | |next(node2) | | next(node3) | | next(NULL) | +------------+ +-------------+ +-------------+ node1 -> node2 -> node3 //交换后 +------------+ +-------------+ +-------------+ |node1 | | node2 | | node3 | |data | | data | | data | |next(NULL) | | next(node1) | | next(node2)| +------------+ +-------------+ +-------------+ node1 <- node2 <- node3 [/code] 就把这些节点的next值修改一下就完了。[/quote]

这是结合他们的回答,自己做的一个分析草图。 temp用来存放以前的链表,使之可以遍历原来的链表。pre用来使每个head都指向他的上一个数,然后将新的head赋给pre。以此循环,最后就pre存放的就是原来链表的最后一个数,并且每个数都指向原来链表中的上一个数。最后返回pre,也就实现了链表的反转。

转载请注明原文地址: https://www.6miu.com/read-42729.html

最新回复(0)