反转链表合并两个有序链表链表分割链表的回文结构相交链表
创始人
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. 如果说两个链表的尾节点地址是相同的,那么这两个链表一定是相交的。

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...