zoukankan      html  css  js  c++  java
  • 【数据结构与算法】链表——回文链表

    回文链表

    LeetCode:回文链表

    题目描述:

    判断一个链表是否为回文链表。

    示例:

    输入: 1->2->2->1
    输出: true
    

    思想:

    先用快慢指针取得中间位置的指针,将后半段链表进行翻转,再遍历比较前半段和后半段是否一致。时间复杂度O(3/2n),空间复杂度O(1)

    优化:在快慢指针的循环中,同时翻转前半段链表,随后从中间位置往两头遍历,时间复杂度O(n)

    代码:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isPalindrome(ListNode head) {
            if(head==null||head.next==null)
                return true;
            ListNode mid=head,end=head;
            while(end!=null&&end.next!=null){
                mid = mid.next;
                end = end.next.next;
            }
            ListNode p=mid,q=mid.next,t;
            while(q!=null){
                t=q.next;
                q.next=p;
                p=q;q=t;
            }
            q=head;
            while(q!=mid){
                if(q.val!=p.val)
                    return false;
                q=q.next;
                p=p.next;
            }
            return true;
        }
    }
    

    优化版,但是代码着实有点复杂,没有上一种方法直白

    class Solution {
        public boolean isPalindrome(ListNode head) {
            if(head==null||head.next==null)
                return true;
            ListNode mid=head,end=head.next,q=head.next,t;
            while(end!=null&&end.next!=null){
                end = end.next.next;
                t = q.next;
                q.next = mid;
                mid = q;q = t;
            }
            ListNode p=(end==null)?mid.next:mid;
            while(q!=null){
                if(q.val!=p.val)
                    return false;
                q=q.next;
                p=p.next;
            }
            return true;
        }
    }
    
  • 相关阅读:
    科研第四天
    科研第三天
    科研的第一天
    django_1.6.8学习笔记——创建project
    第一个project,累哭的第一个app
    前记
    线性表——单链表小结(腾讯面试题)(4)
    一个考试模拟界面——先记录一下下ui上的东东
    源码0602-05-掌握-多值参数
    源码0602-03-掌握-XML解析-NSXMLParser
  • 原文地址:https://www.cnblogs.com/buptleida/p/12684073.html
Copyright © 2011-2022 走看看