單鏈表反轉(兩種方式)-----java版
曾經面試時遇到過這個問題,發現網上關於該問題的內容挺多的,但是很少有能直接看到反轉效果的,為此我寫了一個小demo,供大家參考:
package com.nrsc.Demo; /** * * @author 孫川----單鏈表反轉問題 * */ public class LinkedDemo { // -----節點對應的資料結構------- private class ListNode { int val; ListNode next; ListNode(int x, ListNode next) { this.val = x; this.next = next; } ListNode(int x) { this(x, null); } } // -----節點對應的資料結構------- // 連結串列頭 private ListNode head; // 向連結串列頭新增元素 public void addFirst(int i) { if (head == null) { head = new ListNode(i); return; } head = new ListNode(i, head); } // 遍歷整個連結串列 public void look() { if (head == null) return; ListNode tmp = head; while (tmp != null) { System.out.print(" " + tmp.val); tmp = tmp.next; } } // 反轉連結串列 ---- 方法一:迭代法 public void reverse() { head = reverseList(head); } // 注意這裡的header是形參和本類中的連結串列頭head不是一個,為了區分我加了個er // 下面這段程式碼,畫個圖可以很容易的進行理解 private ListNode reverseList(ListNode header) { if (header == null || header.next == null) return header; ListNode reverse = reverseList(header.next); header.next.next = header; header.next = null; return reverse; } // 反轉連結串列 ---- 方法二:指標挪動 public void reverse2() { head = reverseList(head); } public ListNode reverseList2(ListNode header) { if (header == null || header.next == null) return header; // 將頭賦給pre ListNode pre = header; // 現在的指標 ListNode cur = header.next; // 如果現在的節點不是null,就繼續遍歷 while (cur != null) { ListNode tmp = cur.next; // 臨時變數 // 將現在的指標指向前一個 cur.next = pre; // 向後挪動指標 pre = cur; cur = tmp; } // 別忘了將原來的頭指標指向null header.next = null; return cur; } public static void main(String[] args) { LinkedDemo link = new LinkedDemo(); for (int i = 4; i > 0; i--) link.addFirst(i); System.out.println("反轉前:"); link.look(); System.out.println(); System.out.println("迭代法反轉後:"); link.reverse(); link.look(); System.out.println(); System.out.println("再次用指標移動法進行反轉後:"); link.reverse2(); link.look(); } }
順便貼一下執行結果吧:
相關推薦
單鏈表反轉(兩種方式)-----java版
曾經面試時遇到過這個問題,發現網上關於該問題的內容挺多的,但是很少有能直接看到反轉效果的,為此我寫了一個小demo,供大家參考: package com.nrsc.Demo; /** * * @author 孫川----單鏈表反轉問題 * */
java建立單鏈表的兩種方式
/** * */ /** * @author jueying: * @version 建立時間:2018-10-23 下午01:26:47 * 類說明 */ /** * @author jueying * */ public class Test {
Hibernate學習筆記(一)之——根據配置檔案自動建立表的兩種方式(註解方式和配置檔案方式)
環境準備:jdk eclipse hibernate、mysql jar包 專案截圖: Student是根據配置檔案建立表,Teacher是根據註解建立表 Student.java package com.java1234.model; publi
單鏈表是否有環(Java版)
題目:判斷一個帶頭結點的單鏈表L是否有環 解題思路: 咋看之下,這題還真不好解,於是又一些投機取巧的人,在訪問單鏈表中元素的時候,用一個比較大的數N控制訪問元素的個數,他們認為如果在訪問到第N個元素之
建立單鏈表的兩種方法
*建立單鏈表的方法* 頭插法建立單鏈表 個人感覺尾插法更容易理解= =頭插法看了好久才看懂(mock上的課不錯,這裡的程式碼就來自上面的老師的課件,大部分註釋是我自己的理解) #include <iostream> using namespac
spark-shell 資料檔案 讀成 表 的兩種方式!!! 相對路徑!!hdfs dfs -ls
park SQL應用 Spark Shell啟動後,就可以用Spark SQL API執行資料分析查詢。 在第一個示例中,我們將從文字檔案中載入使用者資料並從資料集中建立一個DataFrame物件。然後執行DataFrame函式,執行特定的資料選擇查詢。 文字檔案cu
單鏈表就地逆置(Java版)
題目:有一個線性表(a1,a2,a3,...,an),採用帶頭節點的單鏈表L儲存,設計一個演算法將其就地逆置,線性表變為(an,...a3,a2,a1)。所謂“就地”指輔助儲存空間為O(1)。
遞迴和迭代兩種方式實現歸併排序(Java版)
遞迴版 package MergeSort; import Utils.SortUtils; /** * 歸併排序遞迴版 * @author liguodong */ pub
java中線性表的兩種實現方式區別
注意:線性表的兩種實現->順序實現和鏈式實現 線性表的兩種實現 順序表 連結串列 空間效能 順序表的儲存空間是靜態分佈的,需要一個固定的陣列,總有部分陣列元素要浪費 連結串列的儲存空間是動態分佈,因此不會有空間被浪費。但由於連結串列需要額外的空間來
java及javascript兩種方式獲取YYYY-MM-dd HH:mm:ss格式的日期字符串
con javascrip var ear second -c form imp minutes 一、java方式 String leaveTime=""; SimpleDateFormat sDateFormat=new SimpleDateFormat("YYYY-M
瀏覽器原生 form 表單POST 數據的兩種方式
mes 但是 lba lose -s ipa mvm 默認 字串 我們在提交表單的時候,form表單參數中會有一個enctype的參數。enctype指定了HTTP請求的Content-Type。 常用有兩種:application/x-www-form-urlencod
form表單提交的兩種方式
btn border 前端 () input onclick sub 輸入 判斷 1.當輸入用戶名和密碼為空的時候,需要判斷。這時候就用到了校驗用戶名和密碼,這個需要在jsp的前端頁面寫;有兩種方法,一種是用submit提交。一種是用button提交。方法一:在jsp的前端
java基礎——java類復用的兩種方式及多態
br0 tm4 rss java 復用 ref lan 兩種 vpx Ik2L卮F3w8仄http://t.docin.com/zdto79252 釋7心ND綠誆3叢毯顧http://t.docin.com/wmmo108 欽uvPX勸盜TJZ口http://t.doc
讀取數據庫配置信息的兩種方式(以後開發項目用java鏈接數據庫)-------java基礎知識
dmi 信息 bsp lock 開發 res port src font 第一步:先建立jdbc.properties 1 user=root 2 password=123456 3 url=mysql:jdbc://localhost:3306/yanlong 4 d
Java中實現多線程的兩種方式
窗口 -- his 面向對象 new thread 資源 pub string /** * 使用Thread類模擬4個售票窗口共同賣100張火車票的程序 * * 沒有共享數據,每個線程各賣100張火車票 * * @author jiqinlin * */pu
java中數組復制的兩種方式
ava log brush class div 方法 () print str 在java中數組復制有兩種方式: 一:System.arraycopy(原數組,開始copy的下標,存放copy內容的數組,開始存放的下標,需要copy的長度); 這個方法需要先創建一個空的
Java並發編程:線程間協作的兩種方式:wait、notify、notifyAll和Condition
消費者 CI 能夠 .com stat consumer 使用 producer imp 原文鏈接 Java並發編程:線程間協作的兩種方式:wait、notify、notifyAll和Condition 在前面我們將了很多關於同步的問題,然而在現實中,需要線程之間的協作。比
對Java代碼加密的兩種方式,防止反編譯
java加密使用Virbox Protector對Java項目加密有兩種方式,一種是對War包加密,一種是對Jar包加密。Virbox Protector支持這兩種文件格式加密,可以加密用於解析class文件的java.exe,並且可以實現項目源碼綁定制定設備,防止部署到客戶服務器的項目被整體拷貝。兩種加密方
Java異常關閉資源的兩種方式
tst ack date tno 都在 output catch AC all try-catch-finally 常用,在異常關閉時應判斷流是否為空 public class CloseableUtils { public static void closeab
Java多線程Thread使用匿名內部類創建的兩種方式
[] thread sys thread類 main 構造 nbsp ide current 匿名內部類實現線程的兩種方式: 第一種方式: 1.繼承Thread類 2.重寫run方法 3.將要執行的代碼寫在run方法中 第二種方式: 1.將Runnable的