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

(2)leetcode 234.回文链表 141.环形链表

234.回文链表

题目链接

234.回文链表

解题思路与代码

获取链表的中间段。

我们将mid这个节点记录下来,然后将这段链表反转,以下是反转的逻辑,最后我们将pre返回就是结果,就是通过中间变量tem记录位置从而实现链表的反转

最后结果比较的的时候,就变成了如图形式

此时就很简单了,我们两边遍历head和head2进行比较,一旦不相同就返回false,比较结束没有返回false说明是回文链表,返回true.

(c++代码)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:

ListNode* reverseList(ListNode* cur) {
    ListNode* pre = NULL;
    while(cur != NULL) {
        ListNode* tem = cur->next;
        cur->next = pre;
        pre = cur;
        cur = tem;
    }
    return pre;
}

ListNode* middleNode(ListNode* head) {
    ListNode* slow = head;
    ListNode* fast = head;
    while(fast != NULL && fast->next != NULL) {
        slow = slow ->next;
        fast = fast->next->next;
    }
    return slow;
}

    bool isPalindrome(ListNode* head) {
        ListNode* mid = middleNode(head);
        ListNode* head2 = reverseList(mid);

        while(head != mid) {
            if(head->val != head2 ->val) {
                return false;
            }
            head = head->next;
            head2 = head2->next;
        }
        return true;
    }
};

141.环形链表

题目链接

141.环形链表

解题思路与代码

举例,像这个,我们从head开始遍历,每次遍历的时候,遍历过一遍就存入set, 如果有环的话,遍历到重复的结点时,就返回true。

像这个,遍历到最后就是到了NULL,跳出循环,然后返回false.

(c++代码)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        unordered_set<ListNode*> st;
        while(head != NULL) {
            if(st.find(head) != st.end()) {
                return true;
            }
            st.insert(head);
            head = head ->next;
        }
        return false;
    }
};

相关文章:

  • 【最佳实践】配置类封装-RestTemplate详解
  • 【C/C++语言系列】浅拷贝和深拷贝
  • 动手学深度学习(五)循环神经网络RNN
  • Docker实操:安装MySQL5.7详解(保姆级教程)
  • 求和(2)
  • 北疆自驾旅行规划
  • docker挂载宿主机文件run命令启动报错
  • Docker+PyCharm远程调试环境隔离解决方案
  • Java I/O终极指南:BIO, NIO, AIO深度剖析
  • C++_CH18_构造函数与析构函数
  • 常见的反爬虫和应对方法
  • Lodash的特点和功能
  • Linux(4)--CentOS8虚拟机下联网
  • 在线查看 Android 系统源代码 AOSPXRef and AndroidXRef
  • python的6种常用数据结构
  • Unity射击游戏开发教程:(35)轰炸敌人
  • 系统 IO
  • linux第二课(docker的安装使用)
  • 基于 jenkins 的持续集成、持续部署方案
  • Python模块和包:标准库模块(os, sys, datetime, math等)②
  • 市场监管总局召开平台企业支持个体工商户发展座谈会
  • 车载抬头显示爆发在即?业内:凭借市场和产业链优势,国内供应商实现反超
  • 人民日报评外卖平台被约谈:摒弃恶性竞争,实现行业健康发展
  • 支持企业增强战略敏捷更好发展,上海市领导密集走访外贸外资企业
  • 夜读丨取稿费的乐趣
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人