当前位置:首页 > 资讯 > 正文

数据结构与算法完整版 | 超详细图解,看这一篇就够了

数据结构与算法完整版 | 超详细图解,看这一篇就够了

输入: 1->2->3->4->5 输出: 5->4->3->2->1
public class ReverseList {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){ListNode prev = null,curr,next;curr = head;while(curr != null){next = curr.next;curr.next = prev;prev = curr;curr = next;}return prev;}public static ListNode recursion(ListNode head) {if (head == null || head.next == null) {return head;}ListNode newHead = recursion(head.next);head.next.next = head;head.next = null;return newHead;}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 node = iterate(node1); ListNode node_1 = recursion(node1); System.out.println(node_1); } }
public static Node reverse(Node node) {if (node == null || node.next == null) {return node;}Node prev = null;Node next = node.next;//next 指向空时,只需再进行最后一次反转while (next != null) {//反转节点node.next = prev;//引用后移prev = node;node = next;next = next.next;}//反转最后一个节点node.next = prev;//返回反转后的链表头引用return node;}
//定义链表:1 -> 2 -> 3Node node = new Node(1);node.next = new Node(2);node.next.next = new Node(3);System.out.println("原始链表:");show(node);//反转链表Node rNode = reverse(node);System.out.println("反转后:");show(node);show(rNode);
原始链表:[Node{num=1, next=2}, Node{num=2, next=3}, Node{num=3, next=}]反转后:[Node{num=1, next=}][Node{num=3, next=2}, Node{num=2, next=1}, Node{num=1, next=}]