
链表类问题
谢蟹蟹猴啊
这个作者很懒,什么都没留下…
展开
-
138. 复制带随机指针的链表
题目: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。思路: 采用哈希表+回溯的方式。如果只需要进行next指针,那我们直接遍历就行。原创 2021-07-22 13:59:14 · 78 阅读 · 0 评论 -
148 排序链表--自定义排序
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next.原创 2021-07-19 15:54:02 · 140 阅读 · 0 评论 -
147. 对链表进行插入排序--插入排序思想
思路: 链表的一个通用思路就是这样,把原始链表存到一个数组里面,然后用排序算法或者什么排序好,然后对他们的next操作就能得到规定排序的链表了。只是增加了空间复杂度。在这里的排序算法是插入排序!!第一次固定一个值认为排序完成,每次位移来让增加的数在原数组排序完成。 首先定位当前索引的前一个索引j,判断当前值是不是比前一个索引下标对应的数组值要小,如果小了肯定要插入所以a[j]一定要后移,所以a[j+1]=a[j],然后减少索引,再次判断已经大了。那就定居把,就a[j+1]=temp。/** *.原创 2021-07-14 21:05:09 · 164 阅读 · 0 评论 -
86. 分隔链表:拆分链表方法和模拟方法
86.分隔链表思路1: 链表题目一定要提前想好思路,这个题目就是可以用两个头节点创建两张新的链表。按顺序遍历原链表,小于x的链表值放到一张链表,大于等于链表值得放到另外一张链表。然后合并即可。这样中间的走线才不会紊乱 有的时候就是不知道要建造几个节点,这边统一总结下: 创建了头结点意味着在这里生成新链表,要配备一个查找节点,因为头结点要next,头结点表示当前处理完的节点。 然后如果head没用就不需要生成新的temp节点。所以有头结点,就配备一个temp。就完事了!class原创 2021-07-01 21:26:55 · 144 阅读 · 0 评论 -
链表题目汇总~ 持续更新(2021.06.05)
1.Leetcode21 合并两个有续链表class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode * dump=new ListNode(-1); ListNode* pre=dump; while(l1!=nullptr && l2!=nullptr){ if(l1->val<=l2->val){原创 2021-06-03 15:36:01 · 218 阅读 · 0 评论 -
反转链表--辅助栈
Leetcode206:反转链表思路:用辅助栈和头节点实现先入后出(反转)class Solution {public: ListNode* reverseList(ListNode* head) { //可以用栈啊 stack<ListNode*>stack; if(!head) return head; while(head){ stack.push(head); head=head->next;原创 2021-05-25 21:18:06 · 103 阅读 · 0 评论