当前位置:首页 > 编程笔记 > 正文
已解决

【面试必刷TOP101】判断一个链表是否为回文结构 链表的奇偶重排

来自网友在路上 154854提问 提问时间:2023-09-21 21:53:25阅读次数: 54

最佳答案 问答题库548位专家为你答疑解惑

目录

题目:判断一个链表是否为回文结构_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

题目:链表的奇偶重排_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:判断一个链表是否为回文结构_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 the head* @return bool布尔型
*/
func isPail( head *ListNode ) bool {// write code here
}

解题思路:

这道题我的思路还是比较清晰的,主要是三步走,首先是快慢指针找到了链表的中点,第二步是对后半部分的链表进行反转操作,以方便最后的比较,第三步就是比较,如果比较结果相同,就证明他是一个回文链表,

这里说两句我的思考,如果我是面试官有可能会出这道题目,他包含了快慢指针找中点的一个思想,包含了链表反转的方案,还包含了链表之间的比较

代码:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 the head* @return bool布尔型
*/
func isPail( head *ListNode ) bool {if head == nil || head.Next == nil {return true}//1,找链表中点,双数就是后面的数fast, slow := head, headfor fast != nil && fast.Next != nil {fast = fast.Next.Nextslow = slow.Next}//2,翻转链表var pre *ListNodecur := slowfor cur != nil {temp := cur.Nextcur.Next = prepre = curcur = temp}//3,比较链表值大小mid := prefor mid != nil {if mid.Val != head.Val {return false}mid = mid.Nexthead = head.Next}return true
}

过啦!!!

题目:链表的奇偶重排_牛客题霸_牛客网 (nowcoder.com)

题目的接口:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @return ListNode类
*/
func oddEvenList( head *ListNode ) *ListNode {}

解题思路:

这道题的方法有很多,可以直接操作链表完成,但是这样思路比较难思考,所以我选择了一个比较简单的方法,就是直接创建两个链表,分离奇数和偶数的节点

最后将奇数链表和偶数链表接到一起就行:

代码:

package main
import . "nc_tools"
/** type ListNode struct{*   Val int*   Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @return ListNode类
*/
func oddEvenList( head *ListNode ) *ListNode {head1 := &ListNode{}head2 := &ListNode{}cur := headpre := head2Rhead := head1num := 0for cur != nil {num++temp := &ListNode{Val: cur.Val}if num % 2 != 0 {head1.Next = temphead1 = temp} else {head2.Next = temphead2 = temp}cur = cur.Next}head1.Next = pre.Nextreturn Rhead.Next
}

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"【面试必刷TOP101】判断一个链表是否为回文结构 链表的奇偶重排":http://eshow365.cn/6-10997-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!