c++ listnode常見問(wèn)題解答

c++
小樊
95
2024-07-24 14:20:17

  1. 什么是ListNode? ListNode是一個(gè)用于創(chuàng)建鏈表的數(shù)據(jù)結(jié)構(gòu),它包含一個(gè)值和一個(gè)指向下一個(gè)節(jié)點(diǎn)的指針。

  2. 如何創(chuàng)建一個(gè)ListNode? 可以通過(guò)以下代碼創(chuàng)建一個(gè)ListNode:

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};
  1. 如何遍歷一個(gè)ListNode鏈表? 可以使用一個(gè)while循環(huán)來(lái)遍歷整個(gè)鏈表,直到當(dāng)前節(jié)點(diǎn)為空為止。例如:
ListNode* current = head;
while (current != nullptr) {
    // 處理當(dāng)前節(jié)點(diǎn)
    current = current->next;
}
  1. 如何在鏈表中插入一個(gè)新的節(jié)點(diǎn)? 可以通過(guò)以下代碼在鏈表中插入一個(gè)新的節(jié)點(diǎn):
ListNode* newNode = new ListNode(value);
newNode->next = current->next;
current->next = newNode;
  1. 如何刪除鏈表中的一個(gè)節(jié)點(diǎn)? 可以通過(guò)以下代碼刪除鏈表中的一個(gè)節(jié)點(diǎn):
ListNode* temp = current->next;
current->next = current->next->next;
delete temp;
  1. 如何反轉(zhuǎn)一個(gè)鏈表? 可以使用迭代或遞歸的方法來(lái)反轉(zhuǎn)一個(gè)鏈表。以下是一個(gè)使用迭代的方法:
ListNode* prev = nullptr;
ListNode* current = head;
ListNode* next = nullptr;

while (current != nullptr) {
    next = current->next;
    current->next = prev;
    prev = current;
    current = next;
}

head = prev;
  1. 如何檢測(cè)一個(gè)鏈表是否有環(huán)? 可以使用快慢指針的方法來(lái)檢測(cè)一個(gè)鏈表是否有環(huán)??熘羔樏看我苿?dòng)兩步,慢指針每次移動(dòng)一步,如果它們?cè)谀骋稽c(diǎn)相遇,則鏈表中有環(huán)。
bool hasCycle(ListNode* head) {
    if (head == nullptr || head->next == nullptr) {
        return false;
    }

    ListNode* slow = head;
    ListNode* fast = head->next;

    while (slow != fast) {
        if (fast == nullptr || fast->next == nullptr) {
            return false;
        }

        slow = slow->next;
        fast = fast->next->next;
    }

    return true;
}

0