反转一个单链表

反转一个单链表。

示例:

输入: 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.完

posted @ 2020-06-18 14:48  熊鑫xxx1x  阅读(220)  评论(0)    收藏  举报