当前位置: 首页 > news >正文

单链表的题目,咕咕咕

1.咕

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

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 

struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* newnode=NULL;struct ListNode* newhead=NULL;while(head){if(head->val!=val)//进行一个尾插就行了{if(newnode==NULL){newnode=head;newhead=head;}else{newnode->next=head;newnode=newnode->next;}}head=head->next;}if(newnode)newnode->next=NULL;return newhead;
}

2.咕咕

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

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

struct ListNode* reverseList(struct ListNode* head) {struct ListNode* l1=NULL;struct ListNode* l2=head;while(l2!=NULL){struct ListNode* l3=l2->next;l2->next=l1;l1=l2;l2=l3;}return l1;
}
//定义3个指针NULL   1  ->  2  ->  3  ->  NULLl1<-   l2<-   l3l1<-   l2 <-  l3

3.咕咕咕

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

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

struct ListNode* middleNode(struct ListNode* head) {if(head==NULL) return NULL;struct ListNode* l1=head;struct ListNode* l2=head;while(l2&&l2->next){l1=l1->next;l2=l2->next->next;}return l1;
}
//快慢指针,找链表中点

4.咕咕咕咕

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

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {if(list1==NULL) return list2;if(list2==NULL) return list1;struct ListNode* l1=list1;struct ListNode* l2=list2;
//申请一个“哨兵位”,放在最前面,可以简化一会尾插的代码,不用考虑尾插时链表为空的情况struct ListNode* newhead=(struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* pcur=newhead;while(l1&&l2){if(l1->val>l2->val){pcur->next=l2;l2=l2->next;}else{pcur->next=l1;l1=l1->next;}pcur=pcur->next;}if(l1) pcur->next=l1;if(l2) pcur->next=l2;newhead=newhead->next;return newhead;
}

5.咕咕咕咕咕

链表的回文结构_牛客题霸_牛客网

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

class PalindromeList {
public:bool chkPalindrome(ListNode* head) {if(head == nullptr || head->next == nullptr) return true;
//先快慢指针找中点ListNode* slow = head;ListNode* fast = head;while(fast && fast->next) {slow = slow->next;fast = fast->next->next;}
//中点之后的链表反转ListNode* reversed = nullptr;ListNode* current = slow;while(current) {ListNode* nextNode = current->next;current->next = reversed;reversed = current;current = nextNode;}
//进行比对ListNode* p1 = head;ListNode* p2 = reversed;bool isPalindrome = true;while(p1 && p2) {if(p1->val != p2->val) {isPalindrome = false;break;}p1 = p1->next;p2 = p2->next;}return isPalindrome;}
};

http://www.dtcms.com/a/275690.html

相关文章:

  • 区块链平台之以太坊深入解读:技术、经济与生态的全面解析
  • 从OpenMV到执行器:当PID算法开始“调教”舵机
  • 计算机视觉与深度学习 | 基于Matlab的多特征融合可视化指纹识别系统(附完整代码)
  • 迅为RK3588开发板Android13系统super.img的解包和重新组包
  • 【C++】封装红黑树模拟实现set和map
  • GESP2025年6月认证C++三级( 第三部分编程题(2)分糖果)
  • MIG_IP核的时钟系统
  • 《硬件产品经理》第七章:产品开发流程之验证
  • 【6.1.3 漫画分布式锁】
  • 【web站点安全开发】任务1:html基础表单和表格
  • C# 接口(派生成员作为实现)
  • Leaflet面试题及答案(41-60)
  • OneCode 3.0架构深度剖析:工程化模块管理与自治UI系统的设计与实现
  • 20250712-3-Kubernetes 应用程序生命周期管理-服务编排(YAML)及编写技巧_笔记
  • 【Elasticsearch】function_score与rescore
  • 【云端深度学习训练与部署平台】AutoDL连接VSCode运行深度学习项目的全流程
  • Qt窗口:菜单栏
  • 人工智能之数学基础:多元逻辑回归算法的矩阵参数求导
  • 回归(多项式回归)
  • 电商订单数据分析全流程:从数据处理到可视化洞察
  • AI Agents时代,数据分析将彻底被颠覆
  • 数据分析库 Pandas
  • 每日一SQL 【销售分析 III】
  • 【Modern C++ Part10】Prefer-scoped-enum-to-unscoped-enums
  • 开源 python 应用 开发(五)python opencv之目标检测
  • (C++)STL标准库(vector动态数组)(list列表)(set集合)(map键值对)相关对比,基础教程
  • React - createPortal
  • React useState原理解密:从源码到实战
  • Java 泛型 (Generics)
  • bp使用爆破模块破解pikachu的登陆密码