【算法系列之三】單鏈表反轉

問題:

實現單鏈表反轉

答案:

鏈表準備

class Node {private int Data;// 數據域private Node Next;// 指針域public Node(int Data) {// super();this.Data = Data;}public int getData() {return Data;}public void setData(int Data) {this.Data = Data;}public Node getNext() {return Next;}public void setNext(Node Next) {this.Next = Next;}
}
public static void main(String[] args) {Node head = new Node(0);Node node1 = new Node(1);Node node2 = new Node(2);Node node3 = new Node(3);head.setNext(node1);node1.setNext(node2);node2.setNext(node3);// 打印反轉前的鏈表Node h = head;while (null != h) {System.out.print(h.getData() + " ");h = h.getNext();}// 調用反轉方法head = reverse(head);System.out.println("\n**************************");// 打印反轉后的結果while (null != head) {System.out.print(head.getData() + " ");head = head.getNext();}}

遞歸反轉法在反轉當前節點之前先反轉后續節點。這樣從頭結點開始,層層深入直到尾結點才開始反轉指針域的指向。簡單的說就是從尾結點開始,逆向反轉各個結點的指針域指向

private static Node reverse1(Node head) {if(head==null||head.getNext()==null){return head;}Node reHead = reverse1(head.getNext());head.getNext().setNext(head);head.setNext(null);return reHead;}

?

遍歷反轉法:遞歸反轉法是從后往前逆序反轉指針域的指向,而遍歷反轉法是從前往后反轉各個結點的指針域的指向

private static Node reverse2(Node head) {if(head==null){return head;}Node pre = head;Node cur = head.getNext();Node temp;while (cur!=null) {temp = cur.getNext();cur.setNext(pre);pre = cur;cur=temp;}head.setNext(null);return pre;}

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java常見異常總結

1、java.lang.NullPointerException(空指針異常)   調用了未經初始化的對象或者是不存在的對象 經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針, 即把數組的…

從數據庫表中隨機獲取N條記錄的SQL語句

Oracle: select * from (select * from tableName order by dbms_random.value) where rownum < N; MS SQLServer: select top N * from tableName order by newid(); My SQL: select * from tableName order by rand() limit N; 轉自&#xff1a;http://blog.csdn.net/sent…

Linux下的MySQL安裝及卸載

1.1 查看mysql的安裝路徑&#xff1a; [rootbogon ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql/usr/share/mysql /usr/share/man/man1/mysql.1.gz 1.2 查看mysql的安裝包&#xff1a; [rootbogon ~]# rpm -qa|grep mysql mysql-community-client-5.6.26-2.…

mysql explain用法

explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法&#xff0c;在select語句前加上explain就可以了&#xff0c;如&#xff1a;explain select * from statuses_status where id11;創建測試表&#xff1a;CR…

Linux 性能檢查命令總結

如果你的Linux服務器突然負載暴增&#xff0c;告警短信快發爆你的手機&#xff0c;如何在最短時間內找出Linux性能問題所在&#xff1f;

線程池的各種使用場景

&#xff08;1&#xff09;高并發、任務執行時間短的業務&#xff0c;線程池線程數可以設置為CPU核數1&#xff0c;減少線程上下文的切換 &#xff08;2&#xff09;并發不高、任務執行時間長的業務要區分開看&#xff1a; a&#xff09;假如是業務時間長集中在IO操作上…

Java線程面試題 Top 50

不管你是新程序員還是老手&#xff0c;你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就是內置了對并發的支持&#xff0c;讓Java大受企業和程序員的歡迎。大多數待遇豐厚的Java開發職位都要求開發者精通多線程技術并且有豐富的Java程序開發、調試、優化經驗&…

深入理解Semaphore

使用 Semaphore是計數信號量。Semaphore管理一系列許可證。每個acquire方法阻塞&#xff0c;直到有一個許可證可以獲得然后拿走一個許可證&#xff1b;每個release方法增加一個許可證&#xff0c;這可能會釋放一個阻塞的acquire方法。然而&#xff0c;其實并沒有實際的許可證這…

【算法系列之四】柱狀圖儲水

題目&#xff1a; 給定一個數組&#xff0c;每個位置的值代表一個高度&#xff0c;那么整個數組可以看做是一個直方圖&#xff0c; 如果把這個直方圖當作容器的話&#xff0c;求這個容器能裝多少水 例如&#xff1a;3&#xff0c;1&#xff0c;2&#xff0c;4 代表第一個位…

鹽城大數據產業園人才公寓_岳西大數據產業園規劃設計暨建筑設計方案公布,搶先一睹效果圖...

近日&#xff0c;岳西縣大數據產業園規劃設計暨建筑設計方案公布。岳西縣大數據產業園項目總占地面積17014.10㎡(約合25.52畝)&#xff0c;擬建總建筑面積約為61590.84㎡(地上建筑面積39907.49㎡&#xff0c;地下建筑面積21602.35㎡)。以“科技圓環”為主題&#xff0c;組建出一…

【算法系列之五】對稱二叉樹

給定一個二叉樹&#xff0c;檢查它是否是鏡像對稱的。 例如&#xff0c;二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1/ \2 2/ \ / \ 3 4 4 3但是下面這個 [1,2,2,null,3,null,3] 則不是鏡像對稱的: 1/ \2 2\ \3 3 說明: 如果你可以運用遞歸和迭代兩種方法解決這個問題&a…

【算法系列之六】兩整數之和

不使用運算符 和 - &#xff0c;計算兩整數 a 、b 之和。 示例 1: 輸入: a 1, b 2 輸出: 3示例 2: 輸入: a -2, b 3 輸出: 1 方法一&#xff1a;遞歸 public static int getSum1(int a, int b) {if ((a & b) ! 0) { // 判斷是否有進位return getSum1(a ^ b, (a &…

cuda默認函數與c++沖突_好程序員Python教程系列-第8講:函數和模塊

好程序員Python教程系列-第8講&#xff1a;函數和模塊&#xff0c;在講解本章節的內容之前&#xff0c;我們先來研究一道數學題&#xff0c;請說出下面的方程有多少組正整數解。事實上&#xff0c;上面的問題等同于將8個蘋果分成四組每組至少一個蘋果有多少種方案&#xff0c;所…

【算法系列之七】合并兩個有序鏈表

將兩個有序鏈表合并為一個新的有序鏈表并返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 示例&#xff1a; 輸入&#xff1a;1->2->4, 1->3->4 輸出&#xff1a;1->1->2->3->4->4/*** Definition for singly-linked list.* public cla…

mfc讓圖片與按鈕一起_對許多張圖片進行批量裁剪,看看我是如何快速做到的

概要&#xff1a;當我們需要對很多圖片進行批量裁剪時&#xff0c;以往的辦法是自己一張一張圖片去操作&#xff0c;非常麻煩。有沒有這樣一個工具&#xff0c;能夠幫我們批量進行處理呢&#xff1f;之前小編在網上找了非常多的軟件&#xff0c;一個一個地安裝試用&#xff0c;…

【算法系列之八】刪除鏈表的倒數第N個節點

給定一個鏈表&#xff0c;刪除鏈表的倒數第 n 個節點&#xff0c;并且返回鏈表的頭結點。 示例&#xff1a; 給定一個鏈表: 1->2->3->4->5, 和 n 2.當刪除了倒數第二個節點后&#xff0c;鏈表變為 1->2->3->5.說明&#xff1a; 給定的 n 保證是有效的…

手寫分頁sql_分頁查詢SQL語句

表結構&#xff1a;DROP TABLE IF EXISTS zhoufoxcn.userlist;CREATE TABLE zhoufoxcn.userlist (UserId int(10) unsigned NOT NULL auto_increment,UserName varchar(45) NOT NULL,Age int(10) unsigned NOT NULL default 10,Sex tinyint(3) unsigned NOT NULL default 1,Ta…

【算法系列之九】合并兩個有序數組

給定兩個有序整數數組 nums1 和 nums2&#xff0c;將 nums2 合并到 nums1 中&#xff0c;使得 num1 成為一個有序數組。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。你可以假設 nums1 有足夠的空間&#xff08;空間大小大于或等于 m n&#xff09;來保存 nums2 …

把網卡指定給vm虛擬機_為VMWare虛擬網卡指定靜態的MAC地址

當你把虛擬機移到另一臺主機或在同一臺主機但不同的路徑時&#xff0c;虛擬機的MAC地址將會更改。默認情況下VMWare會保證MAC地址的唯一性卻不保存固定性&#xff0c;在每次開啟虛擬機里的系統時都可能重新分配MAC地址來保證唯一性&#xff0c;若你想保證即使虛擬機被移動后&am…

【算法系列之十】三數之和

給定一個包含 n 個整數的數組 nums&#xff0c;判斷 nums 中是否存在三個元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有滿足條件且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組。 例如, 給定數組 nums [-1, 0, 1,…