中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

如何使用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
洛扎县| 井冈山市| 武夷山市| 嘉禾县| 五华县| 砀山县| 孟村| 昭觉县| 五大连池市| 建阳市| 玛多县| 隆回县| 塔城市| 龙口市| 青神县| 略阳县| 大宁县| 南陵县| 芦溪县| 登封市| 沂南县| 通山县| 古丈县| 潍坊市| 含山县| 司法| 乌拉特前旗| 东源县| 定远县| 航空| 广南县| 梁山县| 睢宁县| 万全县| 察雅县| 齐齐哈尔市| 延吉市| 洛阳市| 东城区| 漳浦县| 云安县|