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

单链表的题目,咕咕咕

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.xdnf.cn/news/15214.html

相关文章:

  • 【Scratch】从入门到放弃(四):指令大全-九大类之事件、控制、侦测
  • 【小情绪小感悟】
  • houdini 用 vellum 制作一个最简单的布料
  • SiC 型储能充电器设计与研究
  • 岛屿数量问题
  • HT8313功放入门
  • Cell2location maps fine-grained cell types in spatial transcriptomics 文章解析
  • Golang操作MySQL json字段优雅写法
  • 【数据结构初阶】--顺序表(三)
  • 【机器学习实战笔记 16】集成学习:LightGBM算法
  • 【读书笔记】从AI到Transformer:LLM技术演进全解析
  • 智能Agent场景实战指南 Day 11:财务分析Agent系统开发
  • 动态规划基本操作
  • Vue3 学习教程,从入门到精通,Vue3指令知识点及使用方法详细介绍(6)
  • 【TOOL】ubuntu升级cmake版本
  • Linux驱动08 --- 数据库
  • 【PTA数据结构 | C语言版】后缀表达式求值
  • Mamba架构的模型 (内容由deepseek辅助汇总)
  • Edge浏览器:报告不安全的站点的解决方案
  • JAVA线程池详解+学习笔记
  • 鸿蒙NDK开发技巧之-----HAP包如何引入HSP包后,如何给HSP的包传递上下文
  • 非欧几里得空间图卷积算子设计:突破几何限制的图神经网络新范式
  • 从LLM到VLM:视觉语言模型的核心技术与Python实现
  • 如何搭建一个高质量的开放接口平台
  • 顺序队列和链式队列
  • HTML(上)
  • 混合精度训练:梯度缩放动态调整的艺术与科学
  • day4--上传图片、视频
  • AI软件出海SEO教程
  • 从 Spring 源码到项目实战:设计模式落地经验与最佳实践