Leetcode 回文链表(设计链表的反转)

链表的反转

  • 迭代方法的实现

图片引用于https://zhuanlan.zhihu.com/p/48405334

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *curPe = NULL;
        ListNode *cur = head;
        ListNode *curNe;
        while(cur!=NULL)
        {
            curNe = cur->next;
            cur->next = curPe;
            curPe = cur;
            cur = curNe;
        }
        return curPe;
        //curpe cur curNe三个指针一直保持着这个次序,最后当cur指向NULL时,结束。反转后的头节点为curPe。
    }
};
  • 递归方法实现
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
          if(head==NULL||head->next==NULL)
                return head;
           ListNode *p = reverseList(head->next);
            head->next->next =head;
            head->next =NULL;
            return p;
    }
};

油管解释比较清楚的视频

原文地址:https://www.cnblogs.com/-xinxin/p/11116179.html

时间: 2024-08-30 16:14:12

Leetcode 回文链表(设计链表的反转)的相关文章

Leetcode 回文数字判断

一.问题描述 判断一个integer 型的数字是否是回文,空间复杂度应该是常数级别的 . 二.问题分析 首先,负数不是回文,10的整数倍不会是回文,个位数一定是回文. 三.代码实现 思路:将一个数字翻转,即最高位变成最低位,最低位变成最高位,然后比较输入的字符和翻转之后的字符. 1 class Solution { 2 bool isPalindrome(int x) 3 { 4 if( x < 0 || (x%10 == 0 && x != 0)) 5 { 6 return fal

LeetCode 回文串问题

5. Longest Palindromic Substring 647. Palindromic Substrings 解法一:从中心一点向两边扩展,需要考虑中心为一点,中心为两点. 解法二:马拉车算法 原文地址:https://www.cnblogs.com/AntonioSu/p/11830797.html

判断回文链表

我们之前有两篇文章写了回文串和回文序列相关的问题. 寻找回文串的核心思想是从中心向两端扩展: string palindrome(string& s, int l, int r) { // 防止索引越界 while (l >= 0 && r < s.size() && s[l] == s[r]) { // 向两边展开 l--; r++; } // 返回以 s[l] 和 s[r] 为中心的最长回文串 return s.substr(l + 1, r - l

LeetCode——9 Java之回文数

题目: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数. 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 .因此它不是一个回文数.思路:看到这个回文数,立马让我想到了上一道题的整数反转.我先考虑的是把整数转换为字符串,看逆序后的字符串是否和

[算法]回文检测

链表的回文检测 有关链表的回文检测,用到的就是链表操作中常常用到的双指针的方法,找到链表的中点位置,然后依次对比两边的结点.但是在找链表的中点的时候要注意链表的总个数是偶数或者奇数的两种情况. 1.找链表的中点位置,并把中点以前的各个结点的值存入到栈中. 2.针对偶数或者奇数个链表结点,对中点结点做一个小的调整. 3.依次对比栈中结点的值后链表后半部分结点的值是否相等,决定是否是回文结构. 代码实现: bool isPalindrome(ListNode* head) { bool isPali

判断数字是否是回文

思路:如果是负数,直接判断不是回文.然后取得他的反转值,相等则返回true; class Solution { public boolean isPalindrome(int x) { if(x<0){ return false; }else { int huiwen=0; int num=x; while(num!=0){ huiwen = huiwen * 10 + num % 10; num /= 10; } return huiwen==x; } }} 原文地址:https://www.

Leetcode 234. 回文链表(进阶)

题目描述: 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解法一:(空间复杂度O(n)) 遍历一遍链表压栈,借助栈把链表倒序,然后依次比较"原链表元素"和"新栈中元素",如果都相等则返回true,否则返回false. 这样简单粗暴,代码的主体包含在解法二中了,这里不列出了.

LeetCode 234. Palindrome Linked List (回文链表)

Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time and O(1) space? 题目标签:Linked List 题目给了我们一个 linked list,让我们判断它是不是回文. 这里可以利用 #206 Reverse Linked List 把右边一半的链表 倒转,然后从左右两头开始比较链表是否是回文. 这样的话,首先要找到链表的中间点,然后

LeetCode 234——回文链表

1. 题目 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 2. 思路 此题可以看做是反转链表 和 链表中间结点 的结合. 定义快慢两个指针,寻找中间结点,同时在慢指针移动的过程中反转前半部分子链表.当找到中间结点时,再分别向前向后比较前后两个子链表的每一个结点值是否相同. 偶数结点情况如下 此时,我们分别得到了以