亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

java實現鏈表反轉

瀏覽:3日期:2023-12-04 10:11:17

本文為大家分享了java實現鏈表反轉的具體代碼,供大家參考,具體內容如下

算法題:實現鏈表的反轉

提供了2種方法,迭代法、遞歸法。

(為了方便輸出可視化,在自定義的ListNode中重寫了toString方法。)

/** * Created By --- on 2021/8/12 * 以下代碼可以直接粘貼進編譯器輸出 */public class ReverseList { public static void main(String[] args) { ListNode head = new ListNode(3, new ListNode(5, new ListNode(8, new ListNode(9)))); System.out.println('初始鏈表:' + head); ListNode newList = reverseList(head); System.out.println('使用迭代法反轉鏈表:' + newList); ListNode newList2 = reverseList2(null, newList); System.out.println('使用遞歸法反轉鏈表:' + newList2); } /** * 迭代法 */ public static ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; ListNode tmp; while (cur != null) { tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } return pre; } /** * 遞歸法 */ public static ListNode reverseList2(ListNode pre, ListNode cur) { if (cur == null) { return pre; } ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; return reverseList2(pre, cur); } } /** * singly-linked list */class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } @Override public String toString() { StringBuilder sb = new StringBuilder(String.valueOf(val)); ListNode next = this.next; while (next != null) { sb.append(next.val); next = next.next; } return sb.toString(); }}

輸出結果:

java實現鏈表反轉

再為大家分享一段java實現鏈表反轉的三種方式

分別通過棧、遞歸、指針的方式實現:

import java.util.Stack; public class ReverseLinkedList { public static void main(String[] args) {ReverseLinkedList reverseLinkedList = new ReverseLinkedList();reverseLinkedList.test(); } public void test() {Node node1 = new Node(1);Node node2 = new Node(2);Node node3 = new Node(3);node1.setNext(node2);node2.setNext(node3);//方法需要替換node1 = reverseByPointer(node1);while (node1 != null) { System.out.println(node1.val); node1 = node1.getNext();} } //棧實現 private Node reverseByStack(Node head) {if (head == null || head.getNext() == null) { return head;}Stack<Node> stack = new Stack<>();while (head != null) { stack.push(head); head = head.getNext();}head = stack.pop();Node tmp = head;while (!stack.empty()) { Node node = stack.pop(); node.setNext(null); tmp.setNext(node); tmp = node;}return head; } //遞歸實現 private Node reverseByRecursion(Node head) {if (head == null || head.getNext() == null) { return head;}//遞歸獲取當前節點的后一個節點Node tmp = reverseByRecursion(head.getNext());Node node = head.getNext();head.setNext(null);node.setNext(head);return tmp; } //指針實現 private Node reverseByPointer(Node head) {if (head == null || head.getNext() == null) { return head;}//pre指針指向前一個節點,初始第一個節點的前節點為空Node pre = null;//tmp指針指向當前節點Node tmp = null;while (head != null) { //tmp指針指向head頭指針節點 tmp = head; //head頭指針向后遍歷 head = head.getNext(); //反轉,設置當前節點的下一個節點為前一個節點 tmp.setNext(pre); //pre指針向后移動,指向當前節點 pre = tmp;}return tmp; } private class Node {private int val; private Node next; public Node(int val) { this.val = val;} public Node getNext() { return next;} public void setNext(Node next) { this.next = next;} }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 国产美女毛片 | 亚洲精品国产福利一区二区三区 | 波多野结衣免费观看视频 | 国产无套视频在线观看香蕉 | 国产一级在线观看www色 | 日本视频在线观看不卡高清免费 | 欧美一级毛片香蕉网 | 久久精品99毛片免费 | 91欧美激情一区二区三区成人 | 亚洲国产精品综合欧美 | 日本尹人综合香蕉在线观看 | 毛片在线高清免费观看 | 亚洲精品一区91 | 成人中文字幕在线 | 国产女厕偷窥系列在线视频 | 精品亚洲欧美高清不卡高清 | 91成人精品 | 欧美xxxx色视频在线观看 | 久草福利社| 免费观看大片毛片 | 热热涩热热狠狠色香蕉综合 | 久久国产成人亚洲精品影院老金 | 欧美一区二区三区视频 | 精品无码久久久久国产 | 黄色网址网站在线观看 | 91成年人视频 | 成人在线免费观看 | 亚洲免费专区 | 亚洲视频国产视频 | 91精品国产综合久久香蕉 | 成人精品一区二区激情 | 日韩成人在线播放 | 国产精品精品国产 | 一级毛片视屏 | 日本欧美一级aaaaa毛片 | 成年视频国产免费观看 | 国产精品短视频免费观看 | 视频精品一区二区三区 | 国产一区影视 | 青青热久久国产久精品 | 国产亚洲精品2021自在线 |