java鏈表類的反轉(zhuǎn)操作如何實(shí)現(xiàn)

小樊
81
2024-09-28 17:58:38
欄目: 編程語言

在Java中,可以使用迭代或遞歸的方法來實(shí)現(xiàn)鏈表的反轉(zhuǎn)操作。這里分別給出兩種方法的實(shí)現(xiàn):

  1. 迭代方法:
public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode current = head;
    ListNode next = null;

    while (current != null) {
        next = current.next; // 保存當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)
        current.next = prev; // 將當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)指向前一個(gè)節(jié)點(diǎn)
        prev = current; // 更新前一個(gè)節(jié)點(diǎn)為當(dāng)前節(jié)點(diǎn)
        current = next; // 更新當(dāng)前節(jié)點(diǎn)為下一個(gè)節(jié)點(diǎn)
    }

    return prev; // 當(dāng)current為null時(shí),prev即為反轉(zhuǎn)后的鏈表頭節(jié)點(diǎn)
}
  1. 遞歸方法:
public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public ListNode reverseList(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }

    ListNode newHead = reverseList(head.next); // 遞歸反轉(zhuǎn)從head的下一個(gè)節(jié)點(diǎn)開始的鏈表
    head.next.next = head; // 將原鏈表的第二個(gè)節(jié)點(diǎn)指向第一個(gè)節(jié)點(diǎn)
    head.next = null; // 將原鏈表的第一個(gè)節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)置為null

    return newHead; // 返回反轉(zhuǎn)后的鏈表頭節(jié)點(diǎn)
}

這兩種方法都可以實(shí)現(xiàn)鏈表的反轉(zhuǎn)操作,你可以根據(jù)自己的需求和喜好選擇合適的方法。

0