<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
連結串列題——連結串列合併
根據給定的兩個升序連結串列合併為一個新的升序連結串列
具體題目如下
解法
/** * 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 mergeTwoLists(ListNode list1, ListNode list2) { ListNode a = new ListNode(0),b = a; while(list1!=null&&list2!=null){ if(list1.val<=list2.val){ a.next = list1; list1 = list1.next; }else{ a.next = list2; list2 = list2.next; } a = a.next; } if(list1==null){ a.next = list2; } if(list2==null){ a.next = list1; } return b.next; } }
連結串列題——查詢連結串列
根據給定的連結串列標頭檔案判斷其中是否有環
具體題目如下
解法一
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public boolean hasCycle(ListNode head) { HashSet<ListNode> set = new HashSet<ListNode>(); while(head!=null){ if(!set.add(head)){ return true; } set.add(head); head = head.next; } return false; } }
解法二
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public boolean hasCycle(ListNode head) { ListNode fast = head; ListNode slow = head; while(fast!=null){ if(fast.next==null) return false; slow = slow.next; fast = fast.next.next; if(fast==slow) return true; } return false; } }
連結串列題——查詢陣列中元素位置
根據給定的連結串列頭節點查詢返回連結串列入環的第一個節點
具體題目如下
解法一
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle(ListNode head) { HashSet<ListNode> set = new HashSet<ListNode>(); while(head!=null){ if(!set.add(head)){ return head; } set.add(head); head = head.next; } return null; } }
解法二
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode detectCycle(ListNode head) { ListNode fast = head; ListNode slow = head; while(fast!=null){ if(fast.next==null) return null; slow = slow.next; fast = fast.next.next; if(slow == fast){ slow = head; break; } } while(fast!=null){ if(slow == fast){ return slow; } slow = slow.next; fast = fast.next; } return null; } }
連結串列題——查詢連結串列相交起始節點
根據給定的兩個連結串列頭節點按照指定條件查詢起始節點
具體題目如下
解法一
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { HashSet<ListNode> set = new HashSet<ListNode>(); while(headA!=null){ set.add(headA); headA = headA.next; } while(headB!=null){ if(!set.add(headB)){ return headB; } set.add(headB); headB = headB.next; } return null; } }
解法二
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode a = headA, b = headB; while(a != b){ if(a == null) a = headB; else a = a.next; if(b == null) b = headA; else b = b.next; } return a; } }
連結串列題——連結串列操作
根據給定的連結串列刪除指定節點並返回頭節點
具體題目如下
解法
/** * 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 removeNthFromEnd(ListNode head, int n) { ListNode node = new ListNode(-1); node.next = head; ListNode x = findFromEnd(node,n+1); x.next = x.next.next; return node.next; } private ListNode findFromEnd(ListNode head, int k) { ListNode fast = head; ListNode slow = head; for(int i = 0;i<k;i++){ fast = fast.next; } while(fast!=null){ slow = slow.next; fast = fast.next; } return slow; } }
連結串列題——查詢連結串列中間節點
根據給定的連結串列頭節點查詢其中間節點
具體題目如下
解法
/** * 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 middleNode(ListNode head) { ListNode fast = head ; ListNode slow = head ; while(fast!=null){ if(fast.next == null) return slow; slow = slow.next; fast = fast.next.next; } return slow; } }
到此這篇關於劍指Offer之Java演演算法習題精講連結串列專項訓練的文章就介紹到這了,更多相關Java 連結串列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45