diff --git a/链表/2. 反转链表.md b/链表/2. 反转链表.md new file mode 100644 index 0000000..3f67c26 --- /dev/null +++ b/链表/2. 反转链表.md @@ -0,0 +1,75 @@ +# 反转链表 + +## 题目 + +给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 + + +示例 1: + + +输入:head = [1,2,3,4,5] +输出:[5,4,3,2,1] +示例 2: + + +输入:head = [1,2] +输出:[2,1] +示例 3: + +输入:head = [] +输出:[] + + +提示: + +链表中节点的数目范围是 [0, 5000] +-5000 <= Node.val <= 5000 + + +进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? + +## 思路 + +- 初始化 + - 设置虚拟头结点 `dummyHead` +- 头插法 + - 将新来的元素插在虚拟头结点和当前节点之间 + + +## 代码 + +```java +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode reverseList(ListNode head) { + // Special + if (head == null) { + return null; + } + + // Init: dummyHead + ListNode dummyHead = new ListNode(-1, null); + + // Traverse: Insert + while (head != null) { + ListNode tmp = head.next; + head.next = dummyHead.next; + dummyHead.next = head; + head = tmp; + } + + return dummyHead.next; + + } +} +``` \ No newline at end of file