仅用两个指针递归地反转链表会返回吗?

问题描述 投票:-1回答:1

我正在尝试以“仅”两个指针递归地反向链接列表。实际上,每个递归调用都会临时创建第三个指针来辅助它。我有某种算法试图在this之后执行。在堆栈上时,该程序运行良好,但是当程序在堆栈上时,我的退货似乎什么也没做:

public static void main(String[] args)
   {
      ListNode head = new ListNode("hello", null);
      head = new ListNode("foo", head);
      head = new ListNode("boo", head);
      head = new ListNode("nonsense", head);
      head = new ListNode("computer",
         new ListNode("science",
         new ListNode("java",
         new ListNode("coffee", head))));
//head is [computer, science, java, coffee, nonsense, boo, foo, hello]

System.out.print("recur with 2 pointers: \t\t\t\t");
      head = recurTwoPointers(null, head);
      print(head);
public static ListNode recurTwoPointers(ListNode prev, ListNode head)
   {
      if(head == null){
         return head;
      }
      ListNode next = head.getNext();
      head.setNext(prev);
      recurTwoPointers(head, next);
      return next;
   }

我已经尝试过可以想到的所有回报组合。程序进入堆栈,似乎撤消了已完成的操作,并且值丢失了。最后,我最终只返回

[science, computer]

代替

[hello, foo, boo, nonsense, coffee, java, science, computer]
java pointers recursion linked-list reverse
1个回答
1
投票

反转长度为N的列表:

如果N = 1,则返回未修改的列表。

否则,删除并保存列表中的第一项,然后反转长度为N-1的其余列表。将保存的元素添加到末尾后,返回反向列表。

© www.soinside.com 2019 - 2024. All rights reserved.