91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何使用C語言進行回文鏈表的驗證

小樊
82
2024-04-26 17:01:04
欄目: 編程語言

可以通過以下步驟使用C語言進行回文鏈表的驗證:

  1. 定義鏈表節點結構體,包括節點值和指向下一個節點的指針。
  2. 創建一個函數來反轉鏈表,將鏈表的順序倒轉。
  3. 創建一個函數來驗證鏈表是否為回文鏈表。可以使用快慢指針的方法找到鏈表中點,然后將鏈表分為兩部分并反轉其中一部分,最后比較兩部分是否相同。
  4. 在主函數中創建一個鏈表,并調用驗證函數來判斷鏈表是否為回文鏈表。

下面是一個示例代碼:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

Node* reverseList(Node* head) {
    Node* prev = NULL;
    Node* current = head;
    Node* next = NULL;
    
    while (current != NULL) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    
    return prev;
}

int isPalindrome(Node* head) {
    if (head == NULL || head->next == NULL) {
        return 1;
    }
    
    Node* slow = head;
    Node* fast = head;
    
    while (fast->next != NULL && fast->next->next != NULL) {
        slow = slow->next;
        fast = fast->next->next;
    }
    
    Node* secondHalf = reverseList(slow->next);
    Node* firstHalf = head;
    
    while (secondHalf != NULL) {
        if (firstHalf->data != secondHalf->data) {
            return 0;
        }
        firstHalf = firstHalf->next;
        secondHalf = secondHalf->next;
    }
    
    return 1;
}

int main() {
    Node* head = NULL;
    Node* temp = NULL;
    
    // 創建一個示例鏈表 1->2->3->2->1
    head = (Node*)malloc(sizeof(Node));
    head->data = 1;
    
    temp = (Node*)malloc(sizeof(Node));
    temp->data = 2;
    head->next = temp;
    
    temp = (Node*)malloc(sizeof(Node));
    temp->data = 3;
    head->next->next = temp;
    
    temp = (Node*)malloc(sizeof(Node));
    temp->data = 2;
    head->next->next->next = temp;
    
    temp = (Node*)malloc(sizeof(Node));
    temp->data = 1;
    head->next->next->next->next = temp;
    head->next->next->next->next->next = NULL;
    
    if (isPalindrome(head)) {
        printf("The linked list is a palindrome.\n");
    } else {
        printf("The linked list is not a palindrome.\n");
    }
    
    return 0;
}

上面的代碼中,首先定義了鏈表節點結構體,然后創建了一個函數來反轉鏈表。接著定義了驗證鏈表是否為回文鏈表的函數,并在主函數中創建了一個示例鏈表來測試。最后輸出驗證結果。

0
密山市| 象州县| 师宗县| 黑水县| 彭阳县| 钦州市| 黄石市| 青冈县| 独山县| 抚州市| 敦煌市| 南漳县| 外汇| 中西区| 新兴县| 濉溪县| 南京市| 乐清市| 乐至县| 保山市| 遵义市| 格尔木市| 陈巴尔虎旗| 镶黄旗| 佳木斯市| 汤原县| 隆化县| 白朗县| 铁岭市| 五峰| 峨眉山市| 平远县| 淳化县| 志丹县| 望城县| 大厂| 沂源县| 宜兰市| 鄱阳县| 达日县| 运城市|