複雜連結串列的複製(Java實現)
該題為劍指offer面試題26
熱度指數:70797 時間限制:1秒 空間限制:32768K
package go.jacob.day430; public class Demo1 { public RandomListNode Clone(RandomListNode pHead) { createDoubleNode(pHead); connectRandomNode(pHead); RandomListNode newHead = ReconnectNodes(pHead); return newHead; } /* * 複製節點,把新建的節點A‘連線在原節點A後 */ private void createDoubleNode(RandomListNode pHead) { RandomListNode tmpNode = pHead; while (tmpNode != null) { RandomListNode node = new RandomListNode(tmpNode.label); node.next = tmpNode.next; tmpNode.next = node; tmpNode = node.next; } } /* * 連結random節點,eg. 在原連結串列中A的random是B,那麼在新連結串列中,A’連結B‘ */ private void connectRandomNode(RandomListNode pHead) { RandomListNode tmpNode = pHead; while (tmpNode != null) { if (tmpNode.random != null) { RandomListNode node = tmpNode.next; node.random = tmpNode.random.next; tmpNode = node.next; } else { tmpNode = tmpNode.next.next; } } } /* * 把兩個相連的連結串列拆分成兩個 */ private RandomListNode ReconnectNodes(RandomListNode pHead) { if (pHead == null) return null; RandomListNode tmpNode = pHead; RandomListNode newHead = pHead.next; while (tmpNode != null) { RandomListNode node = tmpNode.next; tmpNode.next = node.next; if (node.next != null) node.next = node.next.next; else node.next = null; tmpNode = tmpNode.next; } return newHead; } // 節點類 public class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; RandomListNode(int label) { this.label = label; } } }
相關推薦
複雜連結串列的複製(Java實現)
該題為劍指offer面試題26 熱度指數:70797 時間限制:1秒 空間限制:32768K 輸入一個複雜連結串列(每個節點中有節點值,以及兩個指標,一個指向下一個節點,另一個特殊指標指
資料結構之連結串列操作(c++實現)
1、單向連結串列(頭結點不含資料,不佔長度),C++實現: #include <iostream> #include <stack> using namespace std; /*****定義節點****/ typedef struct node{ int va
複雜連結串列拷貝(面試題)
這是《Google等公司資料結構+演算法面試》上的一道題,原題如下: 下圖是一個含有5個結點的該型別複雜連結串列。 圖中實線箭頭表示m_pNext指標,虛線箭頭表示m_pSibling指標。為簡單起見, 指向NULL的指標沒有畫出。
Java棧(基於連結串列與基於陣列實現)
基於陣列實現 package com.ma.stack; /** * @author sunfch *此棧實現基於陣列,初始棧時已經設定棧大小 */ public class MyArrayStack { private int size; private int top = -1
資料結構-連結串列(java實現)
/** * 連結串列節點定義 * */ private class Node { private Object data; private Node next; public Node getNext() { return next;
LeetCode第23題:合併K個有序連結串列(JAVA實現)
題目: 我的解答: 思路很簡單,把所有的資料先讀到ArrayList中然後轉到陣列中,然後排序,然後構建新連結串列 程式碼: /** * Definition for singly-linked list. * public class ListNode {
無序連結串列實現順序查詢(Java實現)
連結串列中的每個結點儲存一個鍵值對,get()的實現即為遍歷連結串列,equals()方法比較需要被查詢的鍵和每個結點中的鍵,如果匹配成功就返回相應的值,否則返回null。put()的實現也是遍歷連結串
劍指offer之兩個連結串列的第一個公共點(Java實現)
兩個連結串列的第一個公共點 輸入兩個連結串列,找出它們的第一個公共結點 思路:我們先遍歷找到兩個連結串列的長度m和n, 如果m大,m比n大多少,比如說k,那麼先讓m先走k步,然後n和m再一起走。
連結串列排序演算法java實現(連結串列的快速排序、插入排序、歸併排序)
難易程度:★★ 重要性:★★★ 連結串列的排序相對陣列的排序更為複雜些,也是考察求職者是否真正理解了排序演算法(而不是“死記硬背”) 連結串列的插入排序 public class LinkedInsertSort { static cla
LeetCode第24題:兩兩交換連結串列的節點(JAVA實現)
題目: 我的解答: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(i
常見連結串列操作-刪除連結串列倒數第n個節點(JAVA實現)
問題 給出一個單向連結串列,刪除該連結串列倒數第n個節點,並返回頭節點。 例如: 給出連結串列 1->2->3->4->5,n=2 返回連結串列 1->2->3->5 解題思路 最容易想到的演算法: 先遍歷一次連結串列,
常見連結串列操作-求連結串列的中間節點(JAVA實現)
問題 給出任意單向連結串列,找出並返回該連結串列的中間節點。 奇數長度的連結串列,例如:1->2->3->4->5 返回節點 3 偶長度的連結串列,例如:1->2->3->4->5->6 返回節點 4 解題思
leetcode206. 反轉連結串列(java實現)
題目:反轉一個單鏈表。 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 思路: 迭代:讓當前節點的下一個節點是前節點,然後當前節點和下一個節點分別往後移。
劍指offer之連結串列中環的入口(Java實現)
連結串列中環的入口 NowCoder 題目描述: 給一個連結串列,若其中包含環,請找出該連結串列的環的入口結點,否則,輸出null。 ###解題思路: 第一步,找環中相匯點。分別用p1,p2指向連結串列頭部,p1每次走一步,p2每次走二步,直到p1==p2找到在環中的
劍指offer之刪除連結串列中重複的結點(Java實現)
刪除連結串列中重複的結點 NowCoder 題目描述: 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->
劍指offer之從尾到頭列印連結串列(Java實現)
從尾到頭列印連結串列 NowCoder 題目描述: 輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。 ###解題思路: 解法一:利用遞迴 import java.util.ArrayList; public class Solution {
劍指offer面試題6:從尾到頭列印連結串列(Java實現)
題目:輸入一個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。 思路:因為要實現從頭到尾遍歷,然後從尾到頭列印,也就是說第一個遍歷到的最後一個列印,最後遍歷到的第一個列印,這很明顯符合棧 “先進後出” 的特點,所以我們可以利用棧來實現這種順序。 測試用例: 功能測試:
兩個有序連結串列序列的合併(java實現)
02-線性結構1 兩個有序連結串列序列的合併(15 分)本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。函式介面定義:List Merge( List L1, List L2 );輸入樣例:3 1 3 5 5 2 4 6 8 10 輸出樣例:
leetcode連結串列題--刪除連結串列的倒數第N個節點(java實現)
原題 給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。 示例: 給定一個連結串列: 1->2->3->4->5, 和 n = 2. 當刪除了
連結串列:刪除連結串列中重複的結點(java實現)
題目描述 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->