劍指offer系列(16):反轉連結串列
題目描述
輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。
樣例
輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL
思路分析
雙指標法,pre指標用於使原連結串列斷鏈,指向反向,next指標用於節點的移動
程式碼及結果
public ListNode ReverseList(ListNode head) { if (head == null) { return null; } ListNode pre = null; ListNode next = null; while (head != null) { next = head.next; head.next = pre; //斷鏈 pre = head; head = next; } return pre; }
相關推薦
劍指offer系列(16):反轉連結串列
題目描述 輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。 樣例 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 思路分析 雙指標法,pre指
劍指offer系列(4):重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。 樣例分析 例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回{1,2,
劍指offer系列(47):求1+2+3+...+n
題目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 樣例 輸入5 輸出15 思路分析 方法一:利用Math類的api實現n(n+1),即Math.pow(
劍指offer系列(十三)把陣列排成最小的數,醜數,把陣列排成最小的數
把陣列排成最小的數 題目描述 輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 解題思路: 把數字轉換為字串,然後cmp比較大小,升序排列後輸出。 cm
劍指offer系列(十三)陣列中的逆序對,兩個連結串列的第一個公共結點,數字在排序陣列中出現的次數
陣列中的逆序對 題目描述 在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007 輸入描述: 題目保證輸入的陣列中沒有的相同的數字
劍指offer系列(十三)把陣列排成最小的數
把陣列排成最小的數 題目描述 輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 解題思路: 把數字轉換為字串,然後cmp比較大小,升序排列後
劍指offer題解(十):C++&java
二叉搜尋樹的後序遍歷序列 題目描述 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。假設輸入的陣列的任意兩個數字都互不相同。 例如,下圖是後序遍歷序列 3,1,2 所對應的二叉搜尋樹。 解題思路 BST的後序序列的合法序列是
劍指offer題解(四):java&c++
矩陣中的路徑 題目描述 請設計一個函式,用來判斷在一個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一個格子開始,每一步可以在矩陣中向左,向右,向上,向下移動一個格子。如果一條路徑經過了矩陣中的某一個格子,則該路徑不能再進入該格子。
劍指offer系列(39)平衡二叉樹
題目描述輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。思路分析方法一:平衡二叉樹定義:二叉樹中任意節點的左,右子樹深度不超過1 參考之前二叉樹的深度,利用遞迴,依次求出深度,比較即可得出答案方法二:構造內部類 方法一中,一個節點
劍指offer題解(八):c++&java
二叉樹的映象 題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。 解題思路 c++ class Solution { private: void swapfun(TreeNode *root) { T
【劍指offer】面試題18:刪除連結串列的節點
目錄: 題目一:O(1)時間內刪除一個節點 題目二:刪除連結串列中重複的節點 題目一:O(1)時間內刪除一個節點 題目1:給定單向連結串列的頭指標和一個節點指標,定義一個函式在O(1)時間刪除該節點。 在單向連結串
【劍指offer第十五題】反轉連結串列
講的很好,有兩種方法 /* public class ListNode { int val; ListNode next = null; ListNode(int val
劍指offer系列(十二)最小的k個數, 連續子陣列的最大和,整數中1出現的個數
最小的k個數 題目描述 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 解題思路: 思路1,這一題應用堆排序演算法複雜度只有O(nlog k),堆是完全二叉樹的一種,最大堆就是最上面的數是最大的,該方法基於二
劍指offer系列(十一)二叉搜尋樹與雙向連結串列, 字串的排序
二叉搜尋樹與雙向連結串列 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 解題思路: 由於輸入的一個二叉搜尋樹,其左子樹小於右子樹的值,這位後面的排序做了準備,因為只需要中序遍歷即可,將所有 的節點儲存
劍指offer系列(十六)翻轉單詞順序列,撲克牌順子,孩子們的遊戲(圓圈中最後剩下的數)
翻轉單詞順序列 題目描述 牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句
劍指offer系列(十五)和為S的連續正數序列,和為s的兩個數字,左旋轉字串
和為S的連續正數序列 題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現
劍指offer系列(十四)二叉樹的深度,平衡二叉樹,陣列中只出現一次的數字
二叉樹的深度 題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 解題思路: 利用遞迴實現。如果一棵樹只有一個結點,那麼它的深度為1。遞迴的時候無需判斷左右子樹是否存在,因為如果該節點 為葉節點,它的左右
劍指offer系列(十七)求1+2+3+...+n,不用加減乘除做加法,把字串轉換成整數
求1+2+3+...+n 題目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 解題思路: 法一:利用python的特性 法二:用兩個函式,一個遞迴,另一個終止遞迴。如果對n連續進
深入理解JavaScript系列(16):閉包(Closures)
ava hive auto flow style this quest 情況 知識 介紹 本章我們將介紹在JavaScript裏大家常常來討論的話題 —— 閉包(closure)。閉包事實上大家都已經談爛了。雖然如此,這裏還是要試著從理論角度來討論下閉包,
多線程面試題系列(16):多線程十大經典案例之一 雙線程讀寫隊列數據
als single 間隔 eas 講解 art ces 依賴 ini 前十五篇中介紹多線程的相關概念,多線程同步互斥問題(第四篇)及解決多線程同步互斥的常用方法——關鍵段、事件、互斥量、信號量、讀寫鎖。為了讓大家更加熟練運用多線程,將會有十篇文章來講解十個多線程使用案例,