鏈表題目---6 復制帶隨機指針的鏈表

在這里插入圖片描述

思路

  1. 將新結點放在老結點的后面
    在這里插入圖片描述
  2. 復制random
    在這里插入圖片描述
  3. 將鏈表拆開
/*
// Definition for a Node.
class Node {
public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val = _val;next = _next;random = _random;}
};
*/
class Solution {
public:Node* copyRandomList(Node* head) {if (head == NULL){return NULL;}Node *cur = head;while (cur != NULL){//新結點跟在老結點后面Node *node = (Node *)malloc(sizeof(Node));node->val = cur->val;node->random = NULL;Node *next = cur->next;cur->next = node;node->next = next;       //原來cur->nextcur = next;}//復制randomcur = head;while (cur != NULL){Node *node = cur->next;if (cur->random != NULL){node->random = cur->random->next;}cur = node->next;}//拆開cur = head;Node *ret = head->next;while (cur != NULL){Node *node = cur->next;cur->next = node->next;if (node->next != NULL){node->next = cur->next->next;}cur = cur->next;}return ret;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383172.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383172.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383172.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

括號匹配問題(c和c++版本實現)

括號匹配問題 思路 遇見左括號入棧,遇見一個右括號彈出棧頂元素右括號入棧前如果棧已經為空,則不匹配如果不為空則讀取并彈出,彈出來的元素與右括號做比較,必須匹配,不匹配返回false;如果最后棧里還有元素&#xff0c…

用隊列實現棧 AND 用棧實現隊列

用隊列實現棧 思路 入隊列就是入棧出隊列的時候,就是把前面size-1個隊列中的元素先出,這樣最后一個元素就成隊首元素了,再把出去的元素再次入隊列讀棧頂元素,過程和第二步是一樣的,就是彈出后,再把它入隊列…

最小棧的實現(設計一個支持 push,pop,top 操作,并能在常數時間內檢索到最小元素的棧。)

最小棧的實現 思路 兩個棧,左邊棧接受元素,右邊棧存最小的元素入棧時,先入左邊棧,隨后進行比較,左邊和右邊棧頂元素進行比較,如果新元素小,就把新元素放在右邊的棧頂位置,如果新元素…

再寫循環隊列----c++實現

再寫循環隊列 class MyCircularQueue { public:/** Initialize your data structure here. Set the size of the queue to be k. */MyCircularQueue(int k) {array (int *)malloc(sizeof(int)*k);capacity k;size 0;front 0;rear 0;}/** Insert an element into the circu…

再談二叉樹(二叉樹概念,二叉樹的性質,二叉樹的存儲結構)

樹的概念 樹的概念 樹是一種非線性的數據結構,它是由n(n>0)個有限結點組成一個具有層次關系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:每個…

二叉樹題目----1 前序中序后序遍歷二叉樹并返回相應的遍歷(不是打印)

前序遍歷 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*//*** Note: The returned array must be malloced, assume caller calls free().*/ int *array; int size;void _preorde…

二叉樹題目----2 檢查兩顆樹是否相同 和 對稱二叉樹的判定

檢查兩顆樹是否相同 思路 根要相等 p->val q->val左子樹相等 isSameTree(p->left,q->left)右子樹也要相等 isSameTree(p->right,q->right) /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* …

二叉樹題目---3 另一個樹的子樹 AND 二叉樹最大深度

另一個樹的子樹 思路 兩個數都遍歷一遍,找到一個根結點相同時,判斷以這個根結點為首的二叉樹是否相等 前序遍歷判斷兩棵樹是否相同對于返回值的處理是難點 bool isSameTree(struct TreeNode *p, struct TreeNode *q) {if(p NULL && q NULL)…

二叉樹題目----4 前序遍歷重構二叉樹 AND 求二叉樹中所有結點的個數

前序遍歷重構二叉樹 思路 整個二叉樹用數組存儲因為先序遍歷它先遍歷根,再遍歷左,左邊沒有跑完是不會去遍歷右邊的,所以遍歷左子樹,就是數組元素每回向后一個,個數-1遍歷右邊時,就是數組起始位置左子樹跑到…

二叉樹的進階操作---(求二叉樹中所有結點個數,求葉子結點個數,求第k層結點個數;在二叉樹中查找某一結點;層序遍歷;判斷是否為完全二叉樹)

typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef struct Result{TreeNode * root; //構建的樹的根結點int used; //構建過程中用掉的val個數 } Result;求二叉樹中所有結點個數 void TreeSize(TreeNode *root, int …

c++中的智能指針詳解(RAII, auto_ptr的原理及其改進,unique_ptr的原理,shared_ptr的原理,shared_ptr的缺陷及其改進)

為什么需要智能指針 代碼中途退出,也能保證資源的合理釋放,在c中沒有垃圾回收機制的情況下,智能指針就可以保證我們申請的資源,最后忘記釋放的問題,防止內存泄露,也幫我們減少了一定的負擔,不用…

Job for mariadb.service failed because the control process exited with error code. Se

錯誤:[rootlocalhost ~]# systemctl start mariadb.service Job for mariadb.service failed because the control process exited with error code. See “systemctl status mariadb.service” and “journalctl -xe” for details. 解決辦法: [rootl…

二叉樹題目----5 平衡二叉樹 AND 根據二叉樹創建字符串

平衡二叉樹 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/int MAX(int a,int b) {return a > b ? a : b; }//求高度 int getHeight(struct TreeNode *root){if(root NULL){…

再寫堆(堆的性質,向下調整,建堆,堆的插入刪除初始化,堆排序,TopK問題)

堆的概念 如果有一個關鍵碼的集合K{k0,k1,k2,…,kn-1},把它的所有元素按完全二叉樹的順序存儲方式存儲再一個一維數組中&#xff0c;并滿足:Ki<K2i1且Ki<K2i1(Ki > K2i1 且 Ki > K2i2),i0,1,2,3…。則稱為小堆(或大堆)。將根結點最大的堆叫做最大堆或大根堆&#…

二叉樹題目----6 二叉樹的最近公共祖先 AND 二叉樹搜索樹轉換成排序雙向鏈表

二叉樹的最近公共祖先 思路 在左、右子樹中分別查找是否包含p或q&#xff1a;如果以下兩種情況&#xff08;左子樹包含p&#xff0c;右子樹包含q/左子樹包含q&#xff0c;右子樹包含p&#xff09;&#xff0c;那么此時的根節點就是最近公共祖先如果左子樹包含p和q&#xff0c;…

二叉樹題目 ----7 前序中序遍歷構造二叉樹

前序中序遍歷構造二叉樹 思路 在前序中找根結點根據根結點 中序&#xff0c;分成左右兩棵子樹根據子樹長度&#xff0c;把前序分成左右兩顆子樹遞歸處理子樹 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* s…

關聯式容器(map,set,multimap,multiset)

關聯式概念 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;這 些容器統稱為序列式容器&#xff0c;因為其底層為線性序列的數據結構&#xff0c;里面存儲的是元素本身。關聯式容器也是用來存儲數據的&#xff0c;與序列式…

詳解 二叉搜索樹-----AVL樹

二叉搜索樹 根結點比左子樹中所有結點都大根結點比右子樹所有結點都小最小的元素在最左側最大的元素在最右側中序遍歷有序 具有以上的特征的二叉樹就是二叉搜索樹也叫二叉排序數 二叉搜索樹的操作 查找 要保存查找值的雙親&#xff0c;以便于后續執行插入操作 Node* Find(…

json格式與cJSON函數庫

json的格式 鍵/值對 key:value&#xff0c;用半角冒號分割文檔對象 JSON對象寫在花括號中&#xff0c;可以包含多個鍵/值對。數組 JSON 數組在方括號中書寫&#xff1a; 數組成員可以是對象&#xff0c;值&#xff0c;也可以是數組(只要有意義)。 { "stars":[ { &qu…

HTTP清晰的學習筆記

HTTP協議—應用層 請求消息(Request)—瀏覽器給服務器發 包含四部分 請求行&#xff1a;說明請求類型&#xff0c;要訪問的資源&#xff0c;以及使用的http版本請求頭&#xff1a;說明服務器要使用的附加信息,由鍵值對構成的空行&#xff1a;空行是必須要有的&#xff0c;即…