Share Check for Palindromic Linked List

Gologinm35

New member
## Kiểm tra danh sách liên kết palindromic

Một palindrom là một chuỗi đọc cùng một ngược và về phía trước.Ví dụ, chuỗi "Trường đua" là một palindrom.Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách kiểm tra xem một danh sách được liên kết có phải là một palindrom không.

### Thuật toán

Thuật toán để kiểm tra xem danh sách được liên kết có phải là palindrom như sau không:

1. Tạo một ngăn xếp.
2. Lặp qua danh sách được liên kết, đẩy từng nút lên ngăn xếp.
3. Lặp lại thông qua danh sách được liên kết một lần nữa, bắt đầu từ cuối.Đối với mỗi nút, bật một nút ra khỏi ngăn xếp và so sánh nó với nút hiện tại.Nếu các nút không bằng nhau, thì danh sách được liên kết không phải là một palindrom.
4. Nếu danh sách được liên kết được chuyển qua hai lần mà không tìm thấy bất kỳ nút không đồng đều nào, thì danh sách được liên kết là một palindrom.

### Ví dụ

Chúng ta hãy xem một ví dụ về một danh sách được liên kết là một palindrom.

`` `
1 -> 2 -> 3 -> 2 -> 1
`` `

Chúng ta có thể kiểm tra xem danh sách được liên kết này có phải là một palindrom bằng cách làm theo thuật toán ở trên không.

1. Chúng tôi tạo ra một ngăn xếp.
2. Chúng tôi lặp lại thông qua danh sách được liên kết, đẩy từng nút lên ngăn xếp.
3. Chúng tôi lặp lại thông qua danh sách được liên kết một lần nữa, bắt đầu từ cuối.Đối với mỗi nút, chúng tôi bật một nút ra khỏi ngăn xếp và so sánh nó với nút hiện tại.
4. Chúng tôi thấy rằng các nút bằng nhau cho mỗi lần lặp, vì vậy danh sách được liên kết là một palindrom.

### Thực hiện

Sau đây là việc triển khai thuật toán trong Python:

`` `Python
def is_palindrom (đầu):
"" "
Kiểm tra nếu một danh sách được liên kết là một palindrom.

Thông số:
Trưởng phòng: Người đứng đầu của danh sách liên kết.

Trả lại:
Đúng nếu danh sách được liên kết là một palindrom, sai nếu không.
"" "

# Tạo một ngăn xếp.
Stack = []

# Lặp qua danh sách được liên kết, đẩy từng nút lên ngăn xếp.
hiện tại = đầu
Trong khi hiện tại không phải là không có:
Stack.Append (hiện tại)
hiện tại = current.next

# Lặp lại thông qua danh sách được liên kết một lần nữa, bắt đầu từ cuối.Cho mỗi nút,
# bật một nút ra khỏi ngăn xếp và so sánh nó với nút hiện tại.Nếu các nút là
# Không bằng, thì danh sách được liên kết không phải là một palindrom.
hiện tại = đầu
Trong khi hiện tại không phải là không có:
Nếu hiện tại.data! = stack.pop ():
trả lại sai
hiện tại = current.next

# Nếu danh sách được liên kết đi qua hai lần mà không tìm thấy bất kỳ nút không đồng đều nào, thì
# Danh sách được liên kết là một palindrom.
trả về đúng
`` `

### Độ phức tạp

Độ phức tạp về thời gian của thuật toán là O (n), trong đó n là số lượng nút trong danh sách được liên kết.Độ phức tạp không gian của thuật toán là O (N), bởi vì chúng ta cần tạo một ngăn xếp để lưu trữ các nút của danh sách được liên kết.

### hashtags

* #linked-List
* #xuôi ngược đều giống nhau
* #algorithm
* #cấu trúc dữ liệu
* #Python
=======================================
## Check for Palindromic Linked List

A palindrome is a string that reads the same backwards and forwards. For example, the string "racecar" is a palindrome. In this article, we will show you how to check if a linked list is a palindrome.

### Algorithm

The algorithm for checking if a linked list is a palindrome is as follows:

1. Create a stack.
2. Iterate through the linked list, pushing each node onto the stack.
3. Iterate through the linked list again, starting from the end. For each node, pop a node off the stack and compare it to the current node. If the nodes are not equal, then the linked list is not a palindrome.
4. If the linked list is traversed twice without finding any unequal nodes, then the linked list is a palindrome.

### Example

Let's look at an example of a linked list that is a palindrome.

```
1 -> 2 -> 3 -> 2 -> 1
```

We can check if this linked list is a palindrome by following the algorithm above.

1. We create a stack.
2. We iterate through the linked list, pushing each node onto the stack.
3. We iterate through the linked list again, starting from the end. For each node, we pop a node off the stack and compare it to the current node.
4. We find that the nodes are equal for each iteration, so the linked list is a palindrome.

### Implementation

The following is an implementation of the algorithm in Python:

```python
def is_palindrome(head):
"""
Checks if a linked list is a palindrome.

Parameters:
head: The head of the linked list.

Returns:
True if the linked list is a palindrome, False otherwise.
"""

# Create a stack.
stack = []

# Iterate through the linked list, pushing each node onto the stack.
current = head
while current is not None:
stack.append(current)
current = current.next

# Iterate through the linked list again, starting from the end. For each node,
# pop a node off the stack and compare it to the current node. If the nodes are
# not equal, then the linked list is not a palindrome.
current = head
while current is not None:
if current.data != stack.pop():
return False
current = current.next

# If the linked list is traversed twice without finding any unequal nodes, then
# the linked list is a palindrome.
return True
```

### Complexity

The time complexity of the algorithm is O(n), where n is the number of nodes in the linked list. The space complexity of the algorithm is O(n), because we need to create a stack to store the nodes of the linked list.

### Hashtags

* #linked-list
* #palindrome
* #algorithm
* #data-structures
* #Python
 
Đưa ra một danh sách được liên kết, hãy kiểm tra xem nó có phải là một palindrom không.Một palindrom là một chuỗi đọc ngược lại như phía trước.Ví dụ: "Trường đua" là một palindrom.
 
Join ToolsKiemTrieuDoGroup
Back
Top
AdBlock Detected

We get it, advertisements are annoying!

Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

I've Disabled AdBlock