234. Palindrome Linked List

LeetCode easy оригинал: C# #array #csharp #easy #leetcode #linked-list #string

Дан головной элемент односвязного списка. Верните true, если список является палиндромом, и false в противном случае.

Пример

Input: head = [1,2,2,1]

Output: true

C# решение

сопоставлено/оригинал
public class Solution {
    public bool IsPalindrome(ListNode head) {
        List<int> vals = new List<int>();
        ListNode currentNode = head;
        while (currentNode != null) {
            vals.Add(currentNode.val);
            currentNode = currentNode.next;
        }
        int front = 0;
        int back = vals.Count - 1;
        while (front < back) {
            if (vals[front] != vals[back]) {
                return false;
            }
            front++;
            back--;
        }
        return true;
    }
}

C++ решение

auto-draft, проверить перед отправкой
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public bool IsPalindrome(ListNode head) {
        List<int> vals = new List<int>();
        ListNode currentNode = head;
        while (currentNode != null) {
            vals.push_back(currentNode.val);
            currentNode = currentNode.next;
        }
        int front = 0;
        int back = vals.size() - 1;
        while (front < back) {
            if (vals[front] != vals[back]) {
                return false;
            }
            front++;
            back--;
        }
        return true;
    }
}

Java решение

сопоставлено/оригинал
class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> vals = new ArrayList<>();

        ListNode currentNode = head;
        while (currentNode != null) {
            vals.add(currentNode.val);
            currentNode = currentNode.next;
        }

        int front = 0;
        int back = vals.size() - 1;
        while (front < back) {
            if (!vals.get(front).equals(vals.get(back))) {
                return false;
            }
            front++;
            back--;
        }
        return true;
    }
}

JavaScript решение

сопоставлено/оригинал
class Solution {
    isPalindrome(head) {
        let vals = []
        let currentNode = head

        while (currentNode !== null) {
            vals.push(currentNode.val)
            currentNode = currentNode.next
        }

        let front = 0
        let back = vals.length - 1
        while (front < back) {
            if (vals[front] !== vals[back]) {
                return false
            }
            front++
            back--
        }
        return true
    }
}

Python решение

сопоставлено/оригинал
class Solution:
    def isPalindrome(self, head: ListNode) -> bool:
        vals = []
        currentNode = head

        while currentNode is not None:
            vals.append(currentNode.val)
            currentNode = currentNode.next

        front = 0
        back = len(vals) - 1
        while front < back:
            if vals[front] != vals[back]:
                return False
            front += 1
            back -= 1
        return True

Go решение

сопоставлено/оригинал
func isPalindrome(head *ListNode) bool {
    vals := []int{}
    currentNode := head

    for currentNode != nil {
        vals = append(vals, currentNode.Val)
        currentNode = currentNode.Next
    }

    front := 0
    back := len(vals) - 1
    for front < back {
        if vals[front] != vals[back] {
            return false
        }
        front++
        back--
    }
    return true
}

Algorithm

Копирование односвязного списка в массив: Итеративно пройдите по односвязному списку, добавляя каждое значение в массив. Для этого используйте переменную currentNode, указывающую на текущий узел. На каждой итерации добавляйте currentNode.val в массив и обновляйте currentNode, чтобы он указывал на

currentNode.next

. Остановите цикл, когда currentNode укажет на null.

Проверка массива на палиндром: Используйте метод с двумя указателями для проверки массива на палиндром. Разместите один указатель в начале массива, а другой в конце. На каждом шаге проверяйте, равны ли значения, на которые указывают указатели, и перемещайте указатели к центру, пока они не встретятся.

Сравнение значений: Помните, что необходимо сравнивать значения узлов, а не сами узлы. Используйте node_1.val == node_2.val для сравнения значений узлов. Сравнение узлов как объектов node_1 == node_2 не даст ожидаемого результата.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.