【每日刷题】Day7

【每日刷题】Day7

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

[1. 206. 反转链表 - 力扣(LeetCode)](#1. 206. 反转链表 - 力扣(LeetCode))

[2. 203. 移除链表元素 - 力扣(LeetCode)](#2. 203. 移除链表元素 - 力扣(LeetCode))

[3. 876. 链表的中间结点 - 力扣(LeetCode)](#3. 876. 链表的中间结点 - 力扣(LeetCode))

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

//思路:三指针解法。指针pf1开始指向NULL,指针pf2开始指向头节点,指针pf3指向pf2中的next节点,三个同时往后遍历,当pf2走到NULL时,pf1就是要返回的头节点

struct ListNode* reverseList(struct ListNode* head)

{

struct ListNode* pf1 = NULL;

struct ListNode* pf2 = head;

while(pf2)

{

struct ListNode* pf3 = pf2->next;

pf2->next = pf1;

pf1 = pf2;

pf2 = pf3;

}

return pf1;

}

2. 203. 移除链表元素 - 力扣(LeetCode)

//思路:遍历。使用指针pf1放头节点,遍历链表,如果pf1->->val等于题目所给val,则直接将当前next指向next->next,跳过val所在节点

//需要注意的是,需要考虑链表中的val都是题目所给val已经空链表的情况

struct ListNode* removeElements(struct ListNode* head, int val)

{

while(head!=NULL&&(head->val)==val)

{

head = head->next;

}

if(!head)

{

return head;

}

struct ListNode* pf1 = head;

while(pf1->next)

{

if((pf1->next->val)==val)

{

pf1->next = pf1->next->next;

}

else

{

pf1 = pf1->next;

}

}

return head;

}

3. 876. 链表的中间结点 - 力扣(LeetCode)

//思路:快慢指针算法,这种寻找中间点的算法题使用快慢指针会非常便捷高效。主要思路就是指针pf1每次走一个节点,指针pf2每次走两个节点,当pf2走到末节点或走出链表时,pf1所指向的就是需要返回的中间节点。

struct ListNode* middleNode(struct ListNode* head)

{

struct ListNode* pf1 = head;

struct ListNode* pf2 = head;

while(pf2&&pf2->next)

{

pf2 = pf2->next->next;

pf1 = pf1->next;

}

return pf1;

}

相关推荐
大千AI助手15 分钟前
蛙跳积分法:分子动力学模拟中的高效数值积分技术
算法·积分·数值积分·蛙跳积分法·牛顿力学系统·verlet积分算法
zycoder.22 分钟前
力扣面试经典150题day3第五题(lc69),第六题(lc189)
算法·leetcode·面试
小此方42 分钟前
C语言自定义变量类型结构体理论:从初见到精通(上)
c语言·开发语言
西阳未落2 小时前
LeetCode——双指针
c++·算法
胖咕噜的稞达鸭3 小时前
C++中的父继子承:继承方式实现栈及同名隐藏和函数重载的本质区别, 派生类的4个默认成员函数
java·c语言·开发语言·数据结构·c++·redis·算法
笑口常开xpr3 小时前
【C++】模板 - - - 泛型编程的魔法模具,一键生成各类代码
开发语言·数据结构·c++·算法
一碗绿豆汤3 小时前
c语言-运算符
c语言
立志成为大牛的小牛3 小时前
数据结构——十四、构造二叉树(王道408)
数据结构·笔记·学习·程序人生·考研
IT小番茄4 小时前
Kubernetes云平台管理实战:自动加载到负载均衡(七)
算法
笑口常开xpr4 小时前
【C++继承】深入浅出C++继承机制
开发语言·数据结构·c++·算法