002.連結串列反轉(遞迴2021-10-22)
阿新 • • 發佈:2021-10-22
package com.pta.one; /** * 1.連結串列反轉 */ public class ReverseListCopy { static class ListNode { int val; ListNode next; public ListNode(int val, ListNode next) { this.val = val; this.next = next; } } //迭代 public staticListNode iterate(ListNode head) { /** * 1.不用for迴圈是因為不知到迴圈長度(列表長度) * 2.不用foreach是因為傳入的是ListNode,foreach底層依賴迭代器 */ ListNode prev = null, next; ListNode curr = head; while (curr != null) { next = curr.next;//先儲存指標 curr.next = prev;//prev賦值給下一個next prev = curr; curr = next; } return prev; } //遞迴 public static ListNode recursion(ListNode head) { if (head==null || head.next==null) { return head; } //首先找到最後一個元素 ListNode new_head=recursion(head.next); head.next.next= head; head.next = null; return new_head; } public static void main(String[] args) { ListNode node5 = new ListNode(5, null); ListNode node4 = new ListNode(4, node5); ListNode node3 = new ListNode(3, node4); ListNode node2 = new ListNode(2, node3); ListNode node1 = new ListNode(1, node2); ListNode prev = recursion(node1); System.out.println(prev); } }