首页 > 其他 > 详细

234. Palindrome Linked List

时间:2016-09-08 23:18:15      阅读:202      评论:0      收藏:0      [点我收藏+]

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?

 

 public bool IsPalindrome(ListNode head) {
if(head == null) return true;
// Reverse the head;

ListNode standForward  = new ListNode(0);
ListNode stand  =standForward;

ListNode newHead = null;
while(head != null)
    {
        standForward.next = new ListNode(head.val);
        ListNode nextNode = head.next;
        head.next = newHead;
        newHead = head;
        head = nextNode;
        
        standForward = standForward.next;

    }

while(newHead != null)
{
    if(stand.next.val != newHead.val) return false;
    stand=stand.next ;
    newHead = newHead.next;
}
return true;
}

 

 

if use space O(1), we need to use 2 pointer to find the middle pointer of linked list and then reverse the second part of the linked list.

public bool IsPalindrome(ListNode head) {
         if(head == null) return true;
         ListNode slow = head;
         ListNode fast = head;
         ListNode nextNode = null;
         ListNode newHead = null;
         
         //get middle pointer of the linked list
         while(fast != null && fast.next != null)
         {
             slow = slow.next;
             fast = fast.next.next;
         }
         
          while(slow != null)
             {
                 nextNode = slow.next;
                 slow.next = newHead;
                 newHead = slow;
                 slow = nextNode;
             }
         while(head != null && newHead != null)
         {
             if(head.val != newHead.val) return false;
             head = head.next;
             newHead = newHead.next;
         }
         return true;
     }

 

234. Palindrome Linked List

原文:http://www.cnblogs.com/renyualbert/p/5854771.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!