数据结构-链表
2016-04-11 23:08
399 查看
在链表中元素相互依赖,串联而成。
计蒜客的对应章节的答案:
哪位同学最优秀:
#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&¤t_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; }
相关文章推荐
- [C/C++]反转链表
- C#数据结构之顺序表(SeqList)实例详解
- C#实现基于链表的内存记事本实例
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例