• 链表例题6:检查链表中的数据是否回文


      首先需要用到快慢指针的思想,中间需要栈的一些帮助就可以完成此题。

      创建一个快慢指针分别为:fast,slow;开始时他们都指向链表的第一个数据结点,使用一个while循环快指针指向为null时结束,设置快指针一次两步,慢指针一次一步,这样当快指针指向为null时,慢指针指向的这个链表的中心地带,但是这时要注意这个回文的数据个数是为奇还是为偶的问题(因为如果为偶的话则慢指针刚好指的是右边那段数据的第一个结点,而当个数为奇数的时候慢指针指向的是中间那个分界的结点,这个结点是不需要比较的,所以慢指针需要单独向后移动一步),在while的过程中还需要把慢指针前面的部分依次的push进一个栈中,以便后序的比较使用。最后在栈这边出栈,slow这边往后移就,这样一步一步的比较。

      

    代码如下:

     1 import java.util.Stack;
     2 
     3 class LinkedList{
     4     Object data;
     5     LinkedList next;
     6     
     7     public LinkedList(Object data) {
     8         this.data=data;
     9     }
    10 }
    11 
    12 public class PalindromeLinkedList {
    13 
    14     public static void main(String[] args) {
    15         String s[]= {"a","b","c","c","b","a"}; 
    16         LinkedList head=new LinkedList(null);
    17         LinkedList p=head;
    18         for(String n : s)
    19         {
    20             p.next=new LinkedList(n);
    21             p=p.next;
    22         }
    23         
    24         System.out.print(palindrome(head.next));
    25     }
    26 
    27     
    28     public static boolean palindrome(LinkedList headNode) {
    29         if(headNode==null)
    30             return false;
    31         
    32         LinkedList slow=headNode; //慢指针
    33         LinkedList fast=headNode; //快指针
    34         int i=1; //记录是偶个结点还是奇个结点
    35         Stack<Object> leftNode=new Stack<Object>();
    36         if(slow.next==null)
    37             return false;
    38         //进行数据压栈与slow的移动
    39         while(fast!=null)
    40         {
    41             if(fast.next==null) //有奇数个结点
    42             {    
    43                 slow=slow.next;
    44                 break; 
    45             }
    46             leftNode.push(slow.data);
    47             slow=slow.next;
    48             fast=fast.next.next;
    49         }
    50         //进行比较
    51         while(slow!=null)
    52         {
    53             if(leftNode.pop()!=slow.data)
    54                 return false;
    55             slow=slow.next;    
    56         }
    57         return true;
    58         
    59     }
    60 }
  • 相关阅读:
    elasticsearch 基本操作
    ElasticSearch停止启动
    oracle误删数据
    多层级sql查询
    max_result_window
    测试ik分词效果
    TransportClient 新建index,mappings dynamic_templates。
    7.10考试
    C#生成TXT文件
    C#的进度条--progressBar
  • 原文地址:https://www.cnblogs.com/LgxBoKeYuan/p/10208747.html
Copyright © 2020-2023  润新知