周日分享准备
作者:互联网
题是很简单的题 (毕竟我从最简单的题开始做的
1.leetcode237
俺当时看到题第一反应就是。噢 删除呀。不就是p->next=p->next->next?用q来取代p->next ,最后再把q free掉。嗯。这就是应激反应,(压根不看题的傻逼
注意题干。传入函数的唯一参数为要被删除的节点。
上边这个p是你要删除的节点的前一个结点,这显然是不符合的。
想让大家想一想,如果你就是这个节点,我这个做题人啊,要杀了你,这是我接到的命令,你怎么办呢??
好,一个戏剧就出现了。
把自己包装成另一个人,告诉杀手,我已经不是我了,你杀我没有用,你把他杀了就行。反正我已经跟他一模一样了,杀了他。
这就像狸猫换太子 哈哈哈
于是,我们就可以想到。我们把我们要删除的那个节点,包装它的成下一个节点,再free它的下一个节点,不就好了咩。
所以我们可以得到。
node->vail=node->vail->vail.//把我的值跟你一样
node->next=node->next->next//把我的next域也跟你一样
这个结束后,我莫名其妙想起来一句台词,从前的那个xxx,已经死了
然后free 就成!
今天拯救了一个该死没死成的节点。可是它已经不是原来的它了,那跟死掉也没有区别。它代替了它的下一个节点工作着。
如何让自己在世界上消失,但又不死? —— 将自己完全变成另一个人,再杀了那个人就行了。
2.leetcode86分隔链表。
当时我第一反应是想起来有一次培训作业,让把0都放前面 还有那个奇数在前,偶数在后。所以双指针的思想就是这么涌上心头的!
但实际操作过程中,种种磕绊(谁让我菜
其实链表还蛮像火车的,不知道大家有看过托马斯小火车么///
如果你想让这一列火车根据某种规则交换顺序,你是否可以这样呢。
不好意思本腐女突然很想拿这个做例子。
假如,嗯,这是一个gay的相亲会。0和1配对。我们首先把1和0分开。
那好,你是0,你站左边这一队,你是1?稀有!站右边!!
就这样排呀排呀 0都到左边了,1都到右边了,两队站好了。
然后负责人说1站前面,0站后边,好。两队就合成一队了。接下来就配对吧hhh
所以这个题的思想就很显而易见了,利用两个指针,再创建两个链表,也就是排两队。让比x大的排一队,其余的排另一队,然后再合成一队。就完成了这个题。
注意蛤 你这两队要想合并,都要有头有尾的。
p队开头是p 利用p1遍历。
struct ListNode* partition(struct ListNode* head, int x){
if(!head||!head->next)
return head;
struct ListNode*p=(struct ListNode*)malloc(sizeof(struct ListNode)),*p1;
struct ListNode*q=(struct ListNode*)malloc(sizeof(struct ListNode)),*q1;
p1=p;
q1=q;
p1->next=NULL;q1->next=NULL;
while(head)
{
if(head->val<x)
{
p1->next=head;
p1=p1->next;
}
else
{
q1->next=head;
q1=q1->next;
}
head=head->next;
}
p1->next=q->next;
q1->next=NULL;
return p->next;
}
这篇博客写的我好快落!
标签:q1,head,p1,ListNode,struct,next,准备,分享,周日 来源: https://blog.csdn.net/qq_51246916/article/details/110665510