关于单链表的OJ题

一、OJ题目描述与解题思路

        ·移除链表元素

                题目描述
                解题思路
                代码呈现

        ·反转一个单链表

                题目描述
                解题思路
                代码呈现

        ·链表的中间结点

                题目描述
                解题思路
                代码呈现

        ·合并两个有序链表

                题目描述
                解题思路
                代码呈现

      二、 总结

                                OJ题描述与逻辑

一:移除链表元素

1.题目描述
移除链表元素:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

2.解题思路
先解决指针本身是否为空的情况,如果为空直接返回NULL,示例2就成立了。示例1这种情况可以利用开创一个新链表的头结点和一个尾结点,创建一个本身链表用来跑的值。用链表跑的值,用while循环来寻找这个值是否与val值相同,不同则放入新链表中,放入新链表中需要分为两种情况:如果这个新链表为空则直接将头结点和尾结点等于链表中的这个结点;如果这个链表不为空则用尾指针的next指向新节点,尾结点则往下走,然后本身链表的值继续往下走,直到为空结束循环。结束后需要判断新链表的头结点是否为空,为空则返回NULL。然后在判断尾指针的next是否置为NULL,没有则将其改为NULL。最后返回新链表的头结点。

3.代码呈现

二:反转一个单链表

1.题目描述

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

2.解题思路

判断这个链表本身是否为空,为空返回NULL,完成示例三。定义一个新链表,新链表中设一个头结点,一个尾结点。利用链表头插的方法即可实现

3.代码呈现

三 链表的中间结点

1.题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

2.解题思路
先创建一个变量pcur把链表头结点给他,然后利用while循环,判断该链表有多大,用count计算。在利用count除2取整得到while需要循环的次数,在定义一个链表头结点,当while等于0时。出循环,返回该节点。
3.代码呈现

四:合并两个有序链表

1.题目描述

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

2.解题思路
先判断两个链表都为空的情况如果为空直接返回,示例二成立。往下走之后就说明两个链表中有可能会出现一个链表为空的情况,当第一个链表为空,返回第二个链表;当第二个链表为空,返回第一个链表。创建一个新链表,其中有头结点和尾结点,尾结点用来移动,头结点用来返回。创建两个指针,分别是第一个链表和第二个链表用来进行while循环,当一方为空时则直接跳出循环。最后在判断哪个指针为NULL直接将新链表中尾结点的next指针指向不是空的变量。
3.代码呈现

  二、总结:

这是笔者用自己的方法解答算法题,当然解题思路有许多种。希望能给读者带来一些算法上的帮助,如果读者有更好的方法,希望能够发到评论区进行分享或者私聊笔者,谢谢!!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值