1. 程式人生 > 其它 >002.連結串列反轉(遞迴2021-10-22)

002.連結串列反轉(遞迴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 static
ListNode 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); } }