前端
其实今天差点就打乱每日行程了,早上按时起床背完单词,然后今早在看html的书,看到第四章,说要把自己的网站发布上去。然后我就去找办法,如何白嫖个域名,临时学习一下如何发布网站就好了。没想到搜了半天之后就搜到了搭建自己的博客,利用github和hexo创建属于自己的博客,听起来有点帅,就尝试学着搭建,一弄就弄到了下午。创建过程曲折,总有奇怪的错误,然后解决,最后成功创建了。可是自己又不想套用别人的blog架构,但是自己目前的能力搭起来会很慢,所以我就决定先把他放在那,等我把前端知识学完,第一个实践的项目就是搭建好自己的blog界面! 今天记录的要点不多,等明天一起发了。
算法题 来源:力扣(LeetCode)138
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:
val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。 示例1:

示例 2:
输入:head = [[1,1],[2,1]] 输出:[[1,1],[2,1]]
示例 3:
输入:head = [[3,null],[3,0],[3,null]] 输出:[[3,null],[3,0],[3,null]]
示例 4: 输入:head = [] 输出:[] 解释:给定的链表为空(空指针),因此返回 null。
提示: -10000 <= Node.val <= 10000 Node.random 为空(null)或指向链表中的节点。 节点数目不超过 1000 。 解题思路 复制一个普通的链表很简单,但是当多了一个random节点之后,就会让复制变得困难。困难点在当前节点的random节点是链表的第几个,我们在链表中的信息只能得到当前节点的random节点是哪一个,所以我们就利用map,让每一个链表节点都有一个相应的id,就能确切知道当前节点的random节点是链表的第几个,接下来的复制工作就不那么复杂了。
/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
std::map<Node*,int> node_map;
std::vector<Node*>node_vec;//存放复制节点
Node *ptr=head;
int i =0;
while(ptr){
node_vec.push_back(new Node(ptr->val));//放在末尾
node_map[ptr]=i;//给原链表每个节点一个id
ptr=ptr->next;//遍历链表
i++;
}
node_vec.push_back(0);//为了不用处理最后一个节点
ptr=head;
i=0;
while(ptr){
node_vec[i]->next=node_vec[i+1];//新链表链接
if(ptr->random){
int id=node_map[ptr->random];//找到原链表random节点的id
node_vec[i]->random=node_vec[id];//链接random节点
}
ptr=ptr->next;
i++;
}
return node_vec[0];
}
};
算法题 题目:来源:力扣(LeetCode) 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
示例 2: 输入:l1 = [], l2 = [] 输出:[]
示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列
解题思路 这道题题目不难,就两个链表从头对比,,最后需要注意就是,其中一个链表长度比另一个长,需要补上去。
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode temp_head(0);
ListNode *pre=&temp_head;
while(l1&&l2){
if(l1->val<l2->val){
pre->next=l1;
l1=l1->next;
}else{
pre->next=l2;
l2=l2->next;
}
pre=pre->next;
}
if(l1){
pre->next=l1;
}
if(l2){
pre->next=l2;
}
return temp_head.next;
}
};
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44928513/article/details/112689313