- 要分清楚逻辑链表和代码链表的区别,代码链表的head不仅仅是指链表的头节点,还是一个节点类型的变量,代值以head为头节点的整个链表。
- 链表翻转有两种方法,递归和迭代。
- 递归
![示意图](https://img-blog.csdnimg.cn/img_convert/b0ee84c3b23e1b7e0f2453034c6cc84d.png)
![代码流程](https://img-blog.csdnimg.cn/img_convert/0b0fe9cdb91164b9a818afedec18a850.png)
代码实现:
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 迭代
注意:往链表头部添加元素,天然具有倒序的特点。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/b602e555dd1b867f937a18d1b9dbe74a.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/1cd00fa750c90d304d0bbd03266fb923.png)
代码实现:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newnode = null;
ListNode oldnode = head;
while(curr!=null){
ListNode next = oldnode.next;
oldnode.next = newnode;
newnode = oldnode;
oldnode = next;
}
return newnode;
}
}