题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
获得更多?算法思路:代码文档,算法解析的私得。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0a67a53947694b9baa15f0902d903dc7.png
完整代码
/**
* 2 * @Author: LJJ
* 3 * @Date: 2023/7/28 10:54
* 4
*/
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class ReverseLinkedList {
//迭代法反转链表
public static ListNode reverseIterative(ListNode head){
ListNode prev = null;
ListNode current = head;
while (current !=null){
ListNode next = current.next;
current.next = prev;
prev = current;
current = next;
}
return prev;
}
// 递归法反转链表
public static ListNode reverseRecursive(ListNode head){
if (head == null || head.next == null){
return head;
}
ListNode newHead = reverseRecursive(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
public static void printLinkedList(ListNode head) {
ListNode current = head;
while (current != null) {
System.out.print(current.val + " -> ");
current = current.next;
}
System.out.println("null");
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
System.out.println("原始链表:");
printLinkedList(head);
System.out.println("迭代法反转后的链表:");
ListNode reverseIterativeHead = reverseIterative(head);
printLinkedList(reverseIterativeHead);
System.out.println("递归法反转后的链表:");
ListNode reverseRecursiveHead = reverseRecursive(reverseIterativeHead);
printLinkedList(reverseRecursiveHead);
}
}