您的位置:首页 > 理论基础 > 数据结构算法

数据结构-链表

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 链表