Reverse a linkedList
November 22, 2024Less than 1 minute
Reverse a linkedList
e.g. input: 1-2-3 output: 3-2-1
Iteration
public ListNode reverseList(ListNode head) {
ListNode preNode = null;
ListNode currNode = head;
while(currNode != null){
/*因为下面要把currNode的next改为指向preNode
* 为了不丢失本来的结点指向,所以所以需要事先保存一下*/
ListNode next = currNode.next;
currNode.next = preNode;
/*移动双指针*/
preNode = currNode;
currNode = next;
}
return preNode;
}
Recursion
public ListNode reverseList(ListNode head) {
// Base case: 如果链表为空或只剩一个节点,直接返回当前节点
if (head == null || head.next == null) {
return head;
}
// 递归地反转后续链表
ListNode new_head = reverseList(head.next);
// 将当前节点的下一个节点指回当前节点
head.next.next = head;
// 断开当前节点与下一个节点的连接,避免循环
head.next = null;
// 返回反转后的新头节点
return new_head;
}