👉👉👉👉LeetCode刷题训练营👈👈👈👈
欢迎订阅本专栏,说在前面💖
今天给大家带来leetcode相关专栏习题的讲解!
博主为了本系列专栏,做了很多准备,争取图文并茂,让大家看明白!希望大家不要吝啬订阅,与关注,多多评论哦!!💖💖💖💖💖💖💖
一、前言
💪💪💪💪那么这里博主先安利一下其他一些干货满满的专栏啦!💪💪💪💪
玩转Linux操作系统+系统编程+网络编程,快速掌握数据结构宝藏文章,点击下方蓝字即可跳转:
🔝🔝🔝🔝🔝玩转Linux操作系统+系统编程+网络编程🔝🔝🔝🔝🔝
CCF相关真题,点击下方蓝字即可跳转:
🔝🔝🔝🔝🔝 CCF真题🔝🔝🔝🔝🔝
纵横数据结构与算法,点击下方蓝字跳转:
🔝🔝🔝🔝🔝数据结构与算法🔝🔝🔝🔝🔝
二 、正文
CM11 链表分割
#include <cstddef>
#include <cstdlib>
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
struct ListNode* lesshead=(struct ListNode*)malloc(sizeof( struct ListNode));
struct ListNode* greaterhead=(struct ListNode*)malloc(sizeof( struct ListNode));
struct ListNode* lesstail = lesshead;
struct ListNode* greatertail = greaterhead;
lesstail->next =NULL;
greatertail ->next = NULL;
struct ListNode* cur = pHead;
while(cur)
{
if(cur->val < x)
{
lesstail->next = cur;
lesstail = lesstail->next;
cur=cur->next;
}
else{
greatertail->next =cur;
greatertail=greatertail->next;
cur =cur->next;
}
}
//链接
lesstail->next = greaterhead->next;
greatertail->next = NULL;
return lesshead->next;
// write code here
}
};
OR36 链表的回文结构
class PalindromeList {
public:
struct ListNode* midnode(ListNode* A)
{
struct ListNode* head = A;
struct ListNode* fast = A;
struct ListNode* slow = A;
while(fast && fast->next )
{
fast=fast->next->next;
slow= slow->next;
}
return slow;
}
struct ListNode* reverse_list(ListNode* A)//之前博客有讲
{
struct ListNode* prev = NULL;
struct ListNode* cur =A;
struct ListNode* back =A->next;
while(cur)
{
cur->next = prev;
//迭代
prev = cur;
cur=back;
if(back)
back=back->next;
}
return prev;
}
bool chkPalindrome(ListNode* A) {
struct ListNode* mid = NULL;
struct ListNode* rhead = NULL;
struct ListNode* head = A;
mid =midnode(A);
rhead = reverse_list(mid);
while(rhead && head)
{
if(head->val != rhead ->val)
{
return false;
}
head= head->next;
rhead = rhead->next;
}
return true;
// write code here
}
};
160. 相交链表
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode* curA = headA;
struct ListNode* curB = headB;
int lenA =0;
int lenB =0;
while(curA)
{
curA = curA->next;
lenA++;
}
while(curB)
{
curB = curB->next;
lenB++;
}
if(curA != curB)//如果结尾都不相同,那一定没有交点
{
return NULL;
}
int gap= abs(lenA - lenB);
struct ListNode* longlist = NULL;
struct ListNode* shortlist = NULL;
if(lenA >= lenB)
{
longlist = headA;
shortlist = headB;
}
else
{
longlist = headB;
shortlist = headA;
}
while(gap--)
{
longlist =longlist ->next;
}
while(longlist && shortlist)
{
if(longlist == shortlist)
{
return longlist;
}
else{
longlist=longlist->next;
shortlist=shortlist->next;
}
}
return NULL;
}
141. 环形链表
bool hasCycle(struct ListNode *head) {
struct ListNode* fast =head;
struct ListNode* slow = head;
while(fast && fast ->next)
{
slow=slow->next;
fast=fast->next->next;
if(slow == fast)
{
return true;
}
}
return false;
}
三、 结尾💖
🌹🌹🌹🌹🌹🌹🌹 感谢大家的点赞关注,希望大家多多评论!!!🌹🌹🌹🌹🌹🌹🌹