内容纲要
#include "pch.h"
#include <iostream>
using namespace std;

struct Node
{
    Node(int data) {
        this->data = data;
        this->next = nullptr;
    }
    int data;
    Node*next;
};
class linklist
{
private:
    Node *head;
public:
    linklist() {
        head = nullptr;
    };

void Delete(int index) {  // 删除链表节点,
        if (head==nullptr)
        {
            return;
        }
        if (index==0) // 头删法    
        {
            Node* p2 = head->next; // 创建一个新节点P2用来存储头节点的下个节点,
            delete head;// 删除头节点,
            head = p2;// 让头节点的下个节点变成头结点,
            return;
        }
        int cnt = 0;
        for (Node*p=head;p->next!=nullptr;p=p->next) // 中间删除法,也适用于尾部节点删除。
        {
            if (cnt==index-1)  // 这个判断是用来定位到要删除的那个节点的前面一个节点的位置,
            {
                Node* p2 = p->next->next; // 创建一个新的地址用来存储P节点的下个节点的下个节点,
                delete p->next;           //删除P节点的下个节点,
                 p->next=p2 ;             //让P的下个节点等于P2就是原来的下下个节点,
                return;
            }
            cnt++;
        }
    }
    int Get_length() //获得节点的总数,
    {
        int cnt = 0;
        for (Node*p=head;p!=nullptr;p=p->next)  // 从头节点往后数数 ,数到最后一个,当节点等于空的时候,就跳出循环,就返回cnt的值,也就是节点的个数,
        {
            cnt++;
        }
        return cnt;
    }
    Node* Seek(int data) //按照特定的元素值来查找节点,
    {
        for (Node*p=head;p!=nullptr;p=p->next)
        {
            if (p->data==data)  // 判断节点的元素是否等于实参的元素,如果相等则返回P的值,
            {
                return p;
            }
        }
        return nullptr; // 如果上面循环结束没找到相等的元素,则返回空地址;
    };
    Node* GetAt(int index)// 按序号来返回节点,
    {
        int cnt=0;
        for (Node*p = head; p != nullptr; p = p->next)
        {
            if (cnt==index) // 如果CNT等于要找的元素的下标,则返回该元素的节点。
            {
                return p;
            }
            cnt++;
        }
        return nullptr;// 如果没找到就返回 空地址。
    }
    }

    int main()
    {

    return 0;
    }

1 对 “链表,删除链表节点”的想法;

  1. Pingback: viagra online

发表评论