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

这篇具有很好参考价值的文章主要介绍了【面试必刷TOP101】判断一个链表是否为回文结构 & 链表的奇偶重排。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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

题目的接口:

解题思路:

代码:

过啦!!!

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

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


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

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

题目的接口:

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
}

过啦!!!

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

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

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

题目的接口:

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
}


过啦!!!

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

写在最后:

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

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

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~文章来源地址https://www.toymoban.com/news/detail-731515.html

到了这里,关于【面试必刷TOP101】判断一个链表是否为回文结构 & 链表的奇偶重排的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为OD 面试手撕代码真题【判断链表是否有环】

    判断链表是否有环         面试官口述题目,要求实现函数,输入是一个头节点,输出是一个bool值。         相当经典的题目了,感觉面试官要是出这个题,应该是觉的你还不错,出个简单的做出来就完事儿了。剑指offer或者leetcode上的老题了,但是手撕代码经典的问题还是

    2024年02月10日
    浏览(49)
  • 编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。 所谓回文是指顺读和倒读都一样的字符串。如“AMNMA“是回文。

    编写函数,判断一个字符串是否是回文。在主函数中输入一个字符串,调用自定义函数,输出结果。 所谓回文是指顺读和倒读都一样的字符串。如\\\"AMNMA\\\"是回文。 测试输入:abcba 测试输出:是回文! 这道题要求编写一个函数来判断一个字符串是否是回文,并在主函数中调用该

    2024年02月03日
    浏览(68)
  • 链表的回文判断

    思路: 找中间节点–逆置-比较 代码:

    2024年02月07日
    浏览(46)
  • Java 判断一个数是否是回文数(parlindrome)

    回文数 :从左往右读和从右往左读完全相同的数,如121、12321是回文数,12345不是。 思路 :分别获取到原数字的每一位,反过来组成一个新的数,和原数字比较,若相同则是回文数。 代码 : 关键 : %10获取最后一位,之后将数字/10来去掉这一位,如123%10,得到最后一位3,之

    2024年04月12日
    浏览(54)
  • C++判断一个数是否为回文数的算法

    C++判断一个数是否为回文数的算法 回文数是指正序(从左向右)和倒序(从右向左)读都相同的整数。在C++中,我们可以使用算法来判断一个数是否为回文数。下面是一个详细的解释和相应的源代码。 算法思路: 将给定的整数转换成字符串。 使用双指针法来检查字符串的左

    2024年02月06日
    浏览(53)
  • 判断字符串是否为回文的三种常用编程语言实现

    引言:回文是一种具有镜像对称性的字符串,即它从左到右读和从右到左读是相同的。回文可以在文学、语言学、数学、计算机科学等领域中得到广泛应用。在计算机科学中,判断一个字符串是否为回文是一项基本的算法挑战。在本文中,我们将介绍三种常见的编程语言中用

    2024年02月03日
    浏览(54)
  • Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍       文章目录         1.0 链表的创建         2.0 判断回文链表说明         2.1 快慢指针方法         2.2 使用递归方式实现反转链表方法         2.3 实现判断回文链表 - 使用快慢指针与反转链表

    2024年02月05日
    浏览(62)
  • 面试热题(回文链表)

    给定一个链表的  头节点  head  , 请判断其是否为回文链表。 如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。        回文链表类似于回文串,正读倒读的顺序是一样的,那么我们怎么去判断一个链表是否是回文链表呢? 今天我们用多种方法、

    2024年02月13日
    浏览(38)
  • 每日一题——判断链表中是否有环

    题目 判断给定的链表中是否有环。如果有环则返回true,否则返回false。 数据范围:链表长度 0≤n≤10000,链表中任意节点的值满足 ∣val∣=100000 要求:空间复杂度 O(1),时间复杂度 O(n) 输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包