当前位置: 首页 > article >正文

[leetcode]链表基础回顾

一.创建带头节点的链表

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }

    printLinkList(head);

    return 0;
}

二.遍历单链表

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }

    printLinkList(head);

    return 0;
}

三.添加新节点

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

void push_back(LinkList& head, char ch)
{
    LinkList newNode = new Node;
    newNode->next = NULL;
    newNode->ch = ch;
    LinkList p = head;
    while (p->next != nullptr)
    {
        p = p->next;
    }
    p->next = newNode;

}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
    push_back(head, '5');
    printLinkList(head);

    return 0;
}

四.计算链表长度

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

void push_back(LinkList& head, char ch)
{
    LinkList newNode = new Node;
    newNode->next = NULL;
    newNode->ch = ch;
    LinkList p = head;
    while (p->next != nullptr)
    {
        p = p->next;
    }
    p->next = newNode;

}

int size(LinkList head)
{
    int len = 0;
    int size = 0;
    ListNode* p = head->next;
    while (p != NULL)
    {
        size++;
        p = p->next;
    }
    return len;
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
    push_back(head, '5');
    printLinkList(head);

    return 0;
}

五.插入新节点

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

void push_back(LinkList& head, char ch)
{
    LinkList newNode = new Node;
    newNode->next = NULL;
    newNode->ch = ch;
    LinkList p = head;
    while (p->next != nullptr)
    {
        p = p->next;
    }
    p->next = newNode;

}

int size(LinkList head)
{
    int len = 0;
    int size = 0;
    ListNode* p = head->next;
    while (p != NULL)
    {
        size++;
        p = p->next;
    }
    return len;
}


void insert(LinkList& head, int index,char ch)//index从head开始算为0到size
{
    int len = size(head);
    LinkList p = head->next;

    for (int i = 1; i < index - 1; i++)
    {
        p = p->next;
    }
    LinkList newNode = new Node;
    newNode->ch = ch;
    newNode->next = p->next;
    p->next = newNode;
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
    push_back(head, '5');
    insert(head, 3,'3');
    printLinkList(head);
    
    return 0;
}
//1 2 4 #

六.删除节点

void deleteList(LinkList& head, int index) {
    if (head == nullptr || head->next == nullptr || index < 0) {
        // 如果链表为空或索引无效,不执行任何操作
        return;
    }

    LinkList p = head; // p 用于遍历链表,从头节点开始
    if (index == 0) {
        // 如果要删除的是头节点的下一个节点
        LinkList temp = head->next; // 保存要删除的节点
        head->next = temp->next;    // 更新头节点的 next 指针,跳过要删除的节点
        delete temp;               // 释放要删除节点的内存
        return;
    }

    // 找到要删除节点的前一个节点
    for (int i = 1; i < index; i++) {
        if (p->next == nullptr) {
            // 如果索引超出链表范围,不执行任何操作
            return;
        }
        p = p->next;
    }

    if (p->next == nullptr) {
        // 如果索引超出链表范围,不执行任何操作
        return;
    }

    LinkList temp = p->next; // 保存要删除的节点
    p->next = temp->next;  // 更新前一个节点的 next 指针,跳过要删除的节点
    delete temp;           // 释放要删除节点的内存
}


http://www.kler.cn/a/505218.html

相关文章:

  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证5)
  • 微信小程序实现个人中心页面
  • 蓝桥杯_B组_省赛_2022(用作博主自己学习)
  • 计算机的错误计算(二百一十二)
  • 12 USART串口通讯
  • 【C++】多线程
  • Hadoop开发过程中15个常见问题的详细解决方案
  • 智能网联汽车的数据脱敏
  • 使用Spring BootSpring AI快速构建AI应用程序
  • 从 MySQL 到 ClickHouse 的迁移与优化——支持上亿级数据量的复杂检索
  • JavaSE学习心得(多线程与网络编程篇)
  • 【Rust】结构体示例与调试
  • 关于反向传播算法个人的一些思考
  • 登录系统网址作业
  • 数学:机器学习的理论基石
  • 如何安装cnpm
  • 【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
  • MYSQL的第一次作业
  • 一个超快低延迟.Net网络通信库:支持TCP, SSL, UDP, HTTP,HTTPS, WebSocket多协议
  • 32单片机综合应用案例——智能家居灯光控制系统(二)(内附详细代码讲解!!!)
  • 《零基础Go语言算法实战》【题目 4-7】实现链表的排序
  • ukui-quick 计数器
  • 框架集成Minio(内含Minio工具类以及mc突破七天限制)
  • 如何为Python程序单独创建虚拟运行环境(Win/Mac/Linux)
  • GPT-4o背后的语音技术
  • 校园跑腿小程序--我的,登录和注册页面开发