链表的翻转(java)
发布时间:2020-12-15 08:23:19 所属栏目:Java 来源:网络整理
导读:翻转的两种方法:非递归与递归。 1、非递归方法 public ListNode reverse(ListNode node) { Node prev = null; while (node != null) { //每次新建一个链表,用来读取每次循环操作的一个节点 ListNode tmp = node; //将传入的链表指向下一个节点,下次循环将
翻转的两种方法:非递归与递归。 1、非递归方法 public ListNode reverse(ListNode node) { Node prev = null; while (node != null) { //每次新建一个链表,用来读取每次循环操作的一个节点 ListNode tmp = node; //将传入的链表指向下一个节点,下次循环将下一个节点重新赋给tmp node = node.next; //将取出的节点的下一个节点置为上次操作后已完成翻转的部分节点 tmp.next = prev; //将新的完成翻转部分的节点重新赋给待输出的链表 prev = tmp; } //输出已完成翻转的链表 return prev; } ? 2、递归方法 public Node reverse(ListNode node) { ListNode prev = null; //递归判断条件,当链表为空或只有一个节点时,跳出递归 if (node == null || node.next == null) { prev = node; } else { //完成原链表完成从第二个节点到最后一个节点间的翻转 ListNode tmp = reverse(node.next); //原链表第二个节点指向第一个节点 node.next.next = node; //原链表第一个节点指向空,完成链表翻转 node.next = null; prev = tmp; } return prev; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |