反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解题心路:
迭代好说,递归:
第一思路将后面的全部翻转好,再将最后一个元素的next指向当前。
返回最后一个元素的指针,那就有:
当前节点指针:head
已经翻转的尾指针:p
p->next = head;
head->next = null;
这样一顿操作是可以翻转但是丢了头指针。
LeetCode 里面的的儿子们的经典思路:
1.返回头指针,p。p一直不变指向翻转后的链表的头。
2.那怎么知道返回后的链表的尾指针呢,因为只有知道了尾指针我才能把新节点加进去。
3.从思路说起,翻转函数的功能是 翻转前面的节点并返回头结点指针。其余的东西不做任何改变。
4.既然没有改变那么head原来指向的节点也没有改变,前面的翻转后head 还是指向 head->next.而它就是尾。
5.这样一来就好操作了 head->next->next = head; head->next=NULL;
6.解释一下就是将head变成新的尾,并让原来的尾指向它。
7.完
原文:https://www.cnblogs.com/xiongxinxzy/p/13157522.html