原题: https://leetcode-cn.com/problems/reverse-linked-list/
一、题目要求
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
二、解题
package com.leetcode.test.linklist;
/**
* 反转链表
* 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
*/
public class Solution5 {
public static void main(String[] args) {
ListNode a1 = new ListNode(1);
ListNode a2 = new ListNode(2);
ListNode a3 = new ListNode(3);
ListNode a4 = new ListNode(4);
ListNode a5 = new ListNode(5);
a1.next = a2;
a2.next = a3;
a3.next = a4;
a4.next = a5;
ListNode b = reverseList(a1);
while (b != null) {
System.out.print(b.val + " ");
b = b.next;
}
}
//用cur临时保存当前节点,用next临时保存当前节点的下一个节点
public static ListNode reverseList(ListNode head) {
if (head == null){
return null;
}
ListNode pre = null;
ListNode next = head.next;
while (head.next != null){
head.next = pre;
pre = head;
head = next;
next = next.next;
}
//最后一个节点的时候
head.next = pre;
return head;
}
}