要實現單鏈表的反轉,可以使用迭代或遞歸兩種方法。
public ListNode reverseList(ListNode head) {
ListNode prev = null; // 用于存儲反轉后的鏈表
ListNode curr = head; // 當前節點
while (curr != null) {
ListNode nextTemp = curr.next; // 保存下一個節點
curr.next = prev; // 將當前節點的next指向前一個節點,實現反轉
prev = curr; // 將prev指向當前節點,為下一次迭代做準備
curr = nextTemp; // 將當前節點指向下一個節點,進行下一次迭代
}
return prev; // 返回反轉后的鏈表的頭節點
}
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head; // 如果鏈表為空或只有一個節點,則直接返回
}
ListNode p = reverseList(head.next); // 遞歸反轉除第一個節點以外的鏈表
head.next.next = head; // 將第一個節點的next的next指向第一個節點,實現反轉
head.next = null; // 將第一個節點的next指向null,防止形成環
return p; // 返回反轉后的鏈表的頭節點
}