题目:判断一个链表是否为回文结构_牛客题霸_牛客网 (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, head for fast != nil && fast.Next != nil { fast = fast.Next.Next slow = slow.Next } //2,翻转链表 var pre *ListNode cur := slow for cur != nil { temp := cur.Next cur.Next = pre pre = cur cur = temp } //3,比较链表值大小 mid := pre for mid != nil { if mid.Val != head.Val { return false } mid = mid.Next head = 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 := head pre := head2 Rhead := head1 num := 0 for cur != nil { num++ temp := &ListNode{Val: cur.Val} if num % 2 != 0 { head1.Next = temp head1 = temp } else { head2.Next = temp head2 = temp } cur = cur.Next } head1.Next = pre.Next return Rhead.Next }
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~