亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

如何使用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
青河县| 铁岭县| 清水县| 双桥区| 偃师市| 仁怀市| 江津市| 邹城市| 景德镇市| 西昌市| 建湖县| 蓝田县| 湘潭市| 西乌| 江都市| 洪雅县| 杭锦后旗| 道真| 樟树市| 屏山县| 阳春市| 曲水县| 晋中市| 昆山市| 洮南市| 县级市| 元阳县| 兴文县| 修武县| 五大连池市| 阜康市| 兴仁县| 蓬莱市| 繁峙县| 乌审旗| 封开县| 伊通| 竹溪县| 金秀| 邵阳县| 岑溪市|