美文网首页程序员
C# 判断字符串是否是回文字符串(单链表)

C# 判断字符串是否是回文字符串(单链表)

作者: 胡子先生丶 | 来源:发表于2018-11-14 22:32 被阅读0次

    回文字符串:

    ABCDCBA
    ABCDDCBA

    两种都属于回文字符串;

    如何判断一个字符串是否是否回文:

    • 使用快慢指针,判断出中间节点(慢指针每次前进一步,快指针每次前进两步);
    • 将慢指针进行反转;
    • 前后半部分比较,判断是否为回文
    时间复杂度:O(n)
    空间复杂度:O(1)

    空间复杂度要看额外的内存消耗,不是看链表本身存储需要多少空间。

     public static void IsPlalindrome()
            {
                LinkedList<int> ll = new LinkedList<int>();
                ll.Insert(1);
                ll.Insert(2);
                ll.Insert(3);
                ll.Insert(4);
                ll.Insert(3);
                ll.Insert(2);
                ll.Insert(1);
    
                Node<int> pre = null;
    
                Node<int> next = null;
                Node<int> fast = ll.Head;
                Node<int> slow = ll.Head;
    
                while (fast != null && fast.Next != null)
                {
                    fast = fast.Next.Next;
                    next = slow.Next;
                    slow.Next = pre;
                    pre = slow;
                    slow = next;
                }
    
                if (fast != null)//当字符串未基数数 Slow为中间节点4,slow已经反转
                {
                    slow = slow.Next;
                }
    
                while (slow != null) {
                    if (slow.Data != pre.Data)
                    {
                        Console.WriteLine("非回文");
                        return;
                    }
    
                    pre = pre.Next;
                    slow = slow.Next;
                }
    
                Console.WriteLine("回文");
                Console.ReadLine();
            }

    相关文章

      网友评论

        本文标题:C# 判断字符串是否是回文字符串(单链表)

        本文链接:https://www.haomeiwen.com/subject/izbsfqtx.html