leetcode | 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?

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isPalindrome(ListNode head) {
        if(head == null || head.next == null)
        return true;

<span style="white-space:pre">	</span>//一个快指针,一个慢指针,遍历到中间
    ListNode slow = head;
    ListNode fast = head.next;


    /* slow run into the middle
     * fast run into the end of list */
     while(fast!=null && fast.next!=null){
         slow = slow.next;
         fast = fast.next.next;
     }


     
     ListNode preOne = slow;
     ListNode temp = slow.next;
     ListNode aheadOne = temp;
     slow.next = null;


     /* reverse the second half pointer direction of list */
     while(temp != null){
         aheadOne = temp.next;
         temp.next = preOne;
         preOne = temp;
         temp = aheadOne;
     }


     ListNode left = head;
     ListNode right = preOne;
     while(left != null){
         if(left.val != right.val)
            return false;
         left = left.next;
         right = right.next;
     }


     return true;
    }
}


利用栈

import java.util.*;
import java.util.Stack;
/*
public class ListNode {
    int val;
    ListNode next = null;


    ListNode(int val) {
        this.val = val;
    }
}*/
public class Palindrome {
    public boolean isPalindrome(ListNode pHead) {
        // write code here
        Stack<Integer> stack = new Stack<>();
        ListNode slowNode = pHead;
        ListNode fastNode = pHead;
        stack.add(slowNode.val);
        while(fastNode.next!=null&&fastNode.next.next!=null)
        {
            slowNode = slowNode.next;
            stack.add(slowNode.val);
            fastNode = fastNode.next.next;
        }
        if(fastNode.next==null)//奇数
        {
            stack.pop();
        }
        slowNode = slowNode.next;
        while(!stack.isEmpty())
        {
            if(stack.peek()!=slowNode.val)
                return false;
            slowNode = slowNode.next;
            stack.pop();
        }
        return true;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode牛客网都是在线编程练习平台,供程序员进行算法和编程题目的练习。两个平台有一些区别。 LeetCode是一个以算法为主的平台,题目描述简练,直奔主题,通常使用英文进行描述。LeetCode注重算法思维和解题能力的锻炼,题目更偏向于算法和数据结构的应用。许多人在LeetCode上进行练习,习惯了它的题目风格和解题模式。 而牛客网是一个综合性的在线编程平台,除了算法题,还包括面试题、笔试题、实习生项目等。牛客网的题目描述相对LeetCode来说更加贴近实际场景,有更多的描述和背景信息。这也可能导致牛客网的题目相对较长,需要花费一些时间来阅读和理解。 不同的人对于这两个平台的喜好和适应程度各有差异。有的人可能习惯于LeetCode的简练风格,而对牛客网的题目描述感到吃力;有的人则喜欢牛客网提供的更多背景和场景信息。 总的来说,LeetCode牛客网都是很好的编程练习平台,可以根据个人的需要和喜好进行选择和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [LeetCode牛客网的对比](https://blog.csdn.net/zr1076311296/article/details/51606300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值