反转链表合并两个有序链表链表分割链表的回文结构相交链表
创始人
2024-06-03 08:40:03
0

反转链表

来源:杭哥

206. 反转链表 - 力扣(LeetCode)

typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head)
{if (head==NULL){return NULL;}ListNode* prev=head;ListNode* cur=head->next;ListNode* fur=NULL;prev->next=NULL;while(cur!=NULL){fur=cur->next;cur->next=prev;prev=cur;cur=fur;}return prev;
}
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head)
{if (head==NULL){return NULL;}ListNode* prev=head;ListNode* cur=head->next;head->next=NULL;ListNode* phead=head;while(cur!=NULL){prev=cur;cur=cur->next;prev->next=phead;phead=prev;}return phead;
}
我想说:
  1. 我想说的是,像这种问题的话,就图多画一画就迎刃而解了。

  1. 反转链表的话,第一种思路就是利用三指针prev, cur, fur,然后这么倒来倒去就可以了。

  1. 第二种方式的话,可以新创建一个链表的头节点,然后把原先列表当中的每一个节点都头插到这个新链表中。


合并两个有序链表

来源:杭哥

21. 合并两个有序链表 - 力扣(LeetCode)

typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{if(list1==NULL){return list2;}if (list2==NULL){return list1;}ListNode* cur1=list1;ListNode* cur2=list2;ListNode* cur=NULL;ListNode* phead=NULL;int flag=0;while(cur1!=NULL && cur2!=NULL){if (cur1->valval){if (flag==0){flag=1;phead=cur1;}else{cur->next=cur1;}cur=cur1;cur1=cur1->next;}else{if (flag==0){flag=1;phead=cur2;}else{cur->next=cur2;}cur=cur2;cur2=cur2->next;}}if (cur2!=NULL){cur->next=cur2;}if (cur1!=NULL){cur->next=cur1;}return phead;
}
#include 
typedef struct ListNode ListNode;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{ListNode* cur1=list1;ListNode* cur2=list2;ListNode* guard=(ListNode*)malloc(sizeof(ListNode));guard->next=NULL;ListNode* cur=guard;while(cur1!= NULL && cur2!= NULL){if (cur1->val < cur2->val){cur->next= cur1;cur=cur1;cur1=cur1->next;}else{cur->next= cur2;cur=cur2;cur2=cur2->next;}}if (cur1==NULL){cur->next=cur2;}if (cur2==NULL){cur->next=cur1; }return guard->next;
}
我想说:
  1. 带哨兵位的头结点的单链表的好处在于可以回避掉许多因为空指针而带来的麻烦。

  1. 两个链表的合并实际上就类似于归并的思想。


链表分割

来源:杭哥

链表分割_牛客题霸_牛客网 (nowcoder.com)

#include 
class Partition {
public:ListNode* partition(ListNode* pHead, int x){ListNode* guard1 = (ListNode*)malloc(sizeof(ListNode));guard1->next=NULL;ListNode* cur1=guard1;ListNode* guard2 = (ListNode*)malloc(sizeof(ListNode));guard2->next=NULL;ListNode* cur2=guard2;ListNode* cur=pHead;while(cur!=NULL){if (cur->val< x){cur1->next=cur;cur1=cur;}else{cur2->next=cur;cur2=cur;}cur=cur->next;}cur1->next=guard2->next;cur2->next=NULL;return guard1->next;}
};
我想说:
  1. 如果想要回避掉空指针所带来的一系列麻烦,创建新的单链表的时候就选择带哨兵位头结点的单链表形式。


链表的回文结构

来源:杭哥

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

class PalindromeList {
public:bool chkPalindrome(ListNode* A){int count=1;ListNode* slow=A;ListNode* fast=A;while(fast!=NULL && fast->next!=NULL){slow=slow->next;count++;fast=fast->next->next;}ListNode* prev=slow;ListNode* cur=prev->next;ListNode* fur=NULL;ListNode* head=NULL;prev->next==NULL;while(cur!=NULL){fur=cur->next;cur->next=prev;count++;prev=cur;cur=fur;}head=prev;int num=count/2;while(num--){if (A->val != head->val){return false;}A=A->next;head=head->next;}return true;}
};
我想说:
  1. 通过快慢指针(双指针)可以找到链表的中间节点。

  1. 对中间节点及其后面的链表部分反转,然后与前面那一段进行节点数值一一比较。


相交链表

来源:杭哥

160. 相交链表 - 力扣(LeetCode)

typedef struct ListNode ListNode;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 
{int len1=1;int len2=1;ListNode* cura=headA;ListNode* curb=headB;while(cura->next!=NULL){len1++;cura=cura->next;}while(curb->next!=NULL){len2++;curb=curb->next;}if (cura!=curb){return NULL;}int gap=abs(len1-len2);ListNode* longlist=headA;ListNode* shortlist=headB;if (len1next;}while(longlist!=shortlist){longlist=longlist->next;shortlist=shortlist->next;}return longlist;
}
我想说:
  1. 链表相交的话,不是成十字形状的,而是类似于剪刀这种形状,因为一个节点的next指针不可能指向两个位置。

  1. 如果说两个链表的尾节点地址是相同的,那么这两个链表一定是相交的。

相关内容

热门资讯

职工代表大会会议主持词 职工代表大会会议主持词  职工代表大会是职工群众当家作主,参加企业经营决策、管理、监督干部、行使民主...
运动会闭幕式的主持词 运动会闭幕式的主持词(精选5篇)  主持词是主持人在节目进行过程中用于串联节目的串联词。在当今社会中...
德芙橱窗篇广告 德芙橱窗篇广告德芙橱窗篇广告评论整个广告的广告词只有简简单单的“德芙,此刻尽丝滑”,却给人很深刻的印...
《老友记》中超中英文对照经典... 《老友记》中超实用的中英文对照经典台词  《老友记》可以说是最风靡中国的`一部学习美语的剧集了。这几...
员工生日主持词 员工生日主持词3篇  篇一:公司员工集体生日晚会主持词主持人开场白:(背景音乐:激动人心)  各位领...
三八主持词开场白 三八主持词开场白  在现实社会中,很多时候,我们都不可避免的需要用到开场白,独具匠心的开场白,才能给...
篮球比赛主持人串词 篮球比赛主持人串词时 间:---地 点:----主持人:----尊敬的各位领导、各位嘉宾、同学们,大...
六一文艺汇演活动小主持人台词 六一文艺汇演活动小主持人台词尊敬的各位领导.各位老师.各位家长.亲爱的小朋友们:  大家上午好!您现...
金榜题名庆典主持词 金榜题名庆典主持词  主持词需要富有情感,充满热情,才能有效地吸引到观众。在当今中国社会,司仪等是很...
辩论赛主持稿 辩论赛主持稿(4篇)  一场精彩的辩论赛不能少的就是我们的主持人以及他的主持稿了,这个主持稿大家准备...
半搞笑开场白 三句半搞笑开场白三句半搞笑开场白元旦三句半台词贺新年三句半台词辞旧迎新又一年,敲锣打鼓恁别嫌,先给大...
最新年会主持稿 最新年会主持稿10篇  一个年会最重要的便是主持人的主持稿了,下面请看小编带来的年会主持稿!欢迎大家...
新年主持词开场白 2021新年主持词开场白(精选5篇)  主持词没有固定的格式,他的最大特点就是富有个性。在人们越来越...
龙舟节活动致辞 龙舟节活动致辞  在平日的学习、工作和生活里,大家都对致辞很是熟悉吧,致辞是指在仪式上所讲的表示勉励...
新闻发布会主持词 新闻发布会主持词  主持词没有固定的格式,他的最大特点就是富有个性。随着社会一步步向前发展,主持词在...
“庆元旦”文艺汇演园长致辞 “庆元旦”文艺汇演园长致辞尊敬的各位家长,亲爱的小朋友们:大家下午好!又是一年人增岁,转瞬间2012...
婚礼的致辞 婚礼的致辞(精选15篇)  在学习、工作乃至生活中,要用到致辞的地方还是很多的,致辞是指在仪式上所讲...
教师节表彰会主持词 教师节表彰会主持词  沐浴着送爽的浩荡金风,品味着收获的温馨喜悦,又迎来一个新的教师节,下面是小编整...
公司年会致辞 公司年会致辞(15篇)  在现实生活或工作学习中,大家都不可避免地要接触到致辞吧,致辞具有很强的实用...