目录
1.题目
- 1.题目
- 2.思路
- 3.代码实现(Java)
- 4.扩展
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2: 输入:head = [1,2] 输出:[2,1]
示例 3: 输入:head = [] 输出:[]
提示: 链表中节点的数目范围是 [0, 5000] -5000 null 为例: 经过 head.next.next = head 之后,得到 head->p2->head 经过 head.next = null 之后,得到 p2->head->null 这样便将 head 与 p2 进行了反转 */ head.next.next = head; head.next = null; return newHead; } }
//思路2————迭代和双指针
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// prev 指向反转后的头结点,初始值为 null
ListNode prev = null;
// cur 指向待反转部分的头节点,初始值为 head
ListNode curr = head;
while (cur != null) {
//使用 next 记录当前节点 curr 的下一个节点
ListNode next = curr.next;
curr.next = prev;
// cur 和 prev 均向后移动
prev = curr;
curr = next;
}
return prev;
}
}
4.扩展
如果要逆序打印链表,则并且不能改变链表,那么其代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public static void reversePrint(ListNode head) {
if (head == null) {
return;
}
reversePrint(head.next);
System.out.println(head.val);
}
}