数据结构-链表

来源:互联网 发布:windows pe 编辑:程序博客网 时间:2024/06/07 12:31

在链表中元素相互依赖,串联而成。

#include<iostream>using namespace std;class Node {public:    int data;    Node* next;    Node(int _data) {        data = _data;        next = NULL;    }};class LinkList {private:    Node* head;public:    LinkList() {        head = NULL;    }    void insert(Node *node, int index) {        if (head == NULL) {            head = node;            return;        }        if (index == 0) {            node->next = head;            head = node;            return;        }        Node *current_node = head;        int count = 0;        while (current_node->next != NULL && count < index - 1) {            current_node = current_node->next;            count++;        }        if (count == index - 1) {            node->next = current_node->next;            current_node->next = node;        }    }    void output() {        if (head == NULL) {            return;        }        Node *current_node = head;        while (current_node != NULL) {            cout << current_node->data << " ";            current_node = current_node->next;        }        cout << endl;    }    void delete_node(int index) {        if (head == NULL) {            return;        }        Node *current_node = head;        int count = 0;        if (index == 0) {            head = head->next;            delete current_node;            return;        }        while (current_node->next != NULL && count < index -1) {            current_node = current_node->next;            count++;        }        if (count == index - 1 && current_node->next != NULL) {            Node *delete_node = current_node->next;            current_node->next = delete_node->next;            delete delete_node;        }    }    void reverse(){        if(head==NULL){            return;           }        Node *next_node,*current_node;        current_node=head->next;        head->next=NULL;        while(current_node!=NULL){            next_node=current_node->next;            current_node->next=head;            head=current_node;            current_node=next_node;        }    }};int main() {    LinkList linklist;    for (int i = 1; i <= 10; i++) {        Node *node = new Node(i);        linklist.insert(node, i - 1);    }    linklist.output();    linklist.delete_node(3);    linklist.output();    linklist.reverse();    linklist.output();    return 0;}

计蒜客的对应章节的答案:

哪位同学最优秀:

#include <iostream>#include <cstdio>using namespace std;class Node{public:    int data;    Node * next;    Node (int _data){        data=_data;        next=NULL;    }};class Linklist{private:    Node *head;public:    Linklist(){        head=NULL;    }    void insert(Node * node,int index){        Node * current_node=head;        int count=0;        if(index==0){            node->next=head;            head=node;            return;        }        while(current_node->next!=NULL&&count<index-1){            current_node=current_node->next;            count++;        }        if(count==index-1){            node->next=current_node->next;            current_node->next=node;        }    }    void delete_node(int index){        if(head==NULL){            return;        }        Node * current_node=head;        int count =0;        if(index==0){            head=head->next;            delete current_node;            return;        }        while(current_node->next!=NULL&&count<index-1){            current_node=current_node->next;            count++;        }        if(count==index-1&&current_node->next!=NULL){            Node * delete_node=current_node->next;            current_node->next=delete_node->next;            delete delete_node;        }    }    void print(int index){        Node * current_node=head;        for(int i=0;i<index-1;i++){            current_node=current_node->next;        }        cout<<current_node->data;        return;    }};int main(){    int n,m;    Linklist linklist;    cin>>n>>m;    for(int i=1;i<=n;i++){        Node * node = new Node(i);        linklist.insert(node, i-1);    }    for(int i=0;i<m;i++){        int t;        cin>>t;        linklist.delete_node(t-1);    }    linklist.print((n-m)/2+1);    return 0;}
0 0