首页 > 代码库 > 234. Palindrome Linked List
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?
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。