📌  相关文章
📜  用于从线段链接列表中删除中间点的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:40:53.211000             🧑  作者: Mango

用于从线段链接列表中删除中间点的C++程序

线段链接列表中可能存在不必要的中间点,这些中间点会影响程序的效率。因此,需要一种方法来删除这些中间点。

以下是用于从线段链接列表中删除中间点的C++程序的示例代码:

#include <iostream>
#include <cstdlib>

using namespace std;

//定义节点结构体
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

//删除函数,本题的核心部分
ListNode* deleteMiddleNode(ListNode* head) {
    if (!head || !head->next) {
        return head;
    }
    ListNode *slow = head, *fast = head->next;
    while (fast && fast->next) {
        fast = fast->next->next;
        slow = slow->next;
    }
    ListNode *mid = slow->next;
    slow->next = mid->next;
    delete mid;
    return head;
}

//主函数
int main() {
    ListNode* head = new ListNode(1); //创建链表
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);
    head->next->next->next = new ListNode(4);
    head->next->next->next->next = new ListNode(5);//构造一个简单的链表,用于测试

    cout << "删除中间节点前的链表: ";
    for (ListNode* curr = head; curr != NULL; curr = curr->next) { //输出前的链表
        cout << curr->val << " ";
    }
    cout << endl;

    head = deleteMiddleNode(head); //删除中间节点

    cout << "删除中间节点后的链表: ";
    for (ListNode* curr = head; curr != NULL; curr = curr->next) { //输出后的链表
        cout << curr->val << " ";
    }
    cout << endl;

    return 0;
}

该程序使用了快慢指针的方法,先找到中间节点,然后删除该节点即可。

程序执行结果
删除中间节点前的链表: 1 2 3 4 5 
删除中间节点后的链表: 1 2 4 5 

注意,在使用该程序时,需要根据自己的需要修改构建链表的代码,以及在main函数中进行测试。