LeetCode-206.反转链表
题目描述
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
示例:
1 | 输入:head = [1,2,3,4,5] |
1 | 输入:head = [] |
题解
使用swift
语言,需要声明链表结构:
1 | // 单向链表,比如: 1->2->3->4->nil |
方法一:迭代
基本思路:在遍历链表时,将当前节点的next
指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
1 | /** 反转链表:迭代*/ |
方法二:递归
基本思路:假设链表的其余部分已经被反转,由于当前的head
节点的next指针仍然指向其余部分的尾节点,所以将其余部分的末尾节点的next
指向当前的head
节点即可。比如,原始链表为1->2->3->4->nil
,当前head
为1
,其余部分反转后的结果将是4->3->2->nil
,则现在需要将2
的节点的next
指向当前的head
(1
)。由于head.next
仍然指向val
为2
的节点,所以将head.next.next
指向head
即可。
1 | /** 反转链表:递归*/ |