劍指Offer之Java算法習題精講鏈表與二叉樹專項訓練
題目一
鏈表題——反轉鏈表
根據單鏈表的頭節(jié)點head來返回反轉后的鏈表
具體題目如下
解法
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseList(ListNode head) { ListNode pre,cur,nxt; pre = null; cur = head; nxt = head; while(cur!=null){ nxt = cur.next; cur.next = pre; pre = cur; cur = nxt; } return pre; } }
題目二
鏈表題——反轉鏈表
按照一定數量的節(jié)點來進行反轉并返回反轉之后的鏈表
具體題目如下
解法
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { if (head == null) return null; ListNode a, b; a = b = head; for (int i = 0; i < k; i++) { if (b == null) return head; b = b.next; } ListNode newHead = reverse(a, b); a.next = reverseKGroup(b, k); return newHead; } ListNode reverse(ListNode a, ListNode b) { ListNode pre,cur,nxt; pre = null; cur = a; nxt = a; while(cur!=b){ nxt = cur.next; cur.next = pre; pre = cur; cur = nxt; } return pre; } }
題目三
鏈表題——回文鏈表
根據單鏈表的頭節(jié)點head來判斷該鏈表是否是回文鏈表,并返回結果
具體題目如下
解法:后序遍歷與left比較
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { ListNode left; public boolean isPalindrome(ListNode head) { left = head; return traverse(head); } boolean traverse(ListNode right){ if (right == null) return true; boolean res = traverse(right.next); res = res && (right.val == left.val); left = left.next; return res; } }
題目四
二叉樹題——翻轉二叉樹
根據所給的二叉樹根節(jié)點root來翻轉此二叉樹,并返回翻轉后的二叉樹根節(jié)點
具體題目如下
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode invertTree(TreeNode root) { if(root==null){ return null; } TreeNode lf = invertTree(root.left); TreeNode rg = invertTree(root.right); root.left = rg; root.right = lf; return root; } }
題目五
二叉樹題——填充節(jié)點
給定一個完美二叉樹,填充該二叉樹每個節(jié)點的下一個右側節(jié)點指針
具體題目如下
解法
/* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, Node _left, Node _right, Node _next) { val = _val; left = _left; right = _right; next = _next; } }; */ class Solution { public Node connect(Node root) { if(root==null) return null; method(root.left,root.right); return root; } public void method(Node left,Node right){ if (left == null || right == null) { return; } left.next = right; method(left.left,left.right); method(right.left,right.right); method(left.right,right.left); } }
題目六
二叉樹鏈表題——將二叉樹展開為鏈表
根據給定的二叉樹根節(jié)點root,將此二叉樹展開為單鏈表
具體題目如下
解法
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public void flatten(TreeNode root) { if (root == null) return; flatten(root.left); flatten(root.right); TreeNode left = root.left; TreeNode right = root.right; root.left = null; root.right = left; TreeNode p = root; while (p.right != null) { p = p.right; } p.right = right; } }
到此這篇關于劍指Offer之Java算法習題精講鏈表與二叉樹專項訓練的文章就介紹到這了,更多相關Java 鏈表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IntelliJ IDEA 2020.2正式發(fā)布,兩點多多總能助你提效
這篇文章主要介紹了IntelliJ IDEA 2020.2正式發(fā)布,諸多亮點總有幾款能助你提效,本文通過圖文實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下2020-07-07教你如何在IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題)
這篇文章主要介紹了如何在?IDEA?中添加?Maven?項目的?Archetype(解決添加不起作用的問題),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08SpringBoot實用小技巧之如何動態(tài)設置日志級別
這篇文章主要給大家介紹了關于SpringBoot實用小技巧之如何動態(tài)設置日志級別的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SpringBoot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-04-04