本文共 2131 字,大约阅读时间需要 7 分钟。
反转链表是一项常见的操作,可以通过迭代或递归方法实现。本文将分别介绍两种方法,并通过示例验证它们的正确性。
迭代方法:这种方法的思路是创建一个新链表,将旧链表的节点依次从末尾插入到新链表的开头。具体步骤如下:
null
。代码示例如下:
public class ChainTest { public static ListNode reverseNode(ListNode head) { ListNode prev = null; ListNode cur = head; while (cur != null) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } return prev; } public static void main(String[] args) { ListNode n5 = new ListNode(5); ListNode n4 = new ListNode(4, n5); ListNode n3 = new ListNode(3, n4); ListNode n2 = new ListNode(2, n3); ListNode n1 = new ListNode(1, n2); ListNode reversed = reverseNode(n1); while (reversed != null) { System.out.println(reversed.value); reversed = reversed.next; } } static class ListNode { private int value; private ListNode next; public ListNode(int value) { this.value = value; } public ListNode(int value, ListNode next) { this.value = value; this.next = next; } }}
递归方法:递归方法的思路是将问题分解,假设反转链表的子节点,然后将当前节点插入到反转后的链表开头。
head.next
),得到结果。代码示例如下:
public class ChainTest { public static ListNode reverseNode(ListNode head) { if (head == null || head.next == null) { return head; } ListNode last = reverseNode(head.next); head.next.next = head; head.next = null; return last; } public static void main(String[] args) { ListNode n5 = new ListNode(5); ListNode n4 = newώνα付款链接节点(4, n5); ListNode n3 = new ListNode(3, n4); ListNode n2 = new Λ Nodes(2, n3); ListNode n1 = new ListNode(1, n2); ListNode reversed = reverseNode(n1); while (reversed != null) { System.out.println(reversed.value); reversed = reversed.next; } }}
通过以上两种方法,可以轻松实现链表的反转。迭代法推荐用于处理较多节点的情况,因其避免了递归可能导致的栈溢出问题。而递归方法则更便于代码的阅读和理解。根据具体需求选择合适的方法即可。
转载地址:http://nagyk.baihongyu.com/