在考研中,一般要用指针来实现链表
展示一下链表中最基本的操作
单链表
#include<iostream>
using namespace std;
struct Node
{
int val;
Node*next;
Node(int _val) : val(_val),next(NULL) {}
Node() : next(NULL){}
};
void print(Node *head)
{
for(auto p=head;p;p=p->next)
{
cout<<p->val<<" ";
}
cout<<endl;
}
int main()
{
//1.insert
//tail way
Node*head=new Node(1);
print(head);
auto a=new Node(2);
head->next=a;
print(head);
auto b=new Node(3);
a->next=b;
print(head);
//head way
auto c=new Node(4);
c->next=head;
head=c;
print(head);
//2.move
a->next=a->next->next;
print(head);
}
双链表
#include<iostream>
using namespace std;
struct Node
{
int val;
Node *pre;
Node *next;
Node(int _val) : val(_val),pre(NULL),next(NULL){}
Node(): pre(NULL), next(NULL){}
};
void print(Node *head)
{
for(auto p=head->next;p->next;p=p->next)
{
cout<<p->val<<" ";
}
cout<<endl;
}
int main()
{
//insert
Node *head=new Node();Node *tail=new Node();
head->next=tail;tail->pre=head;
//head way
auto a=new Node(1);
a->next=head->next;
a->pre=head;
head->next->pre=a;
head->next=a;
print(head);
auto b=new Node(2);
b->next=head->next;
b->pre=head;
head->next->pre=b;
head->next=b;
print(head);
//node behind way
auto c=new Node(3);
c->next=a->next;
c->pre=a;
a->next->pre=c;
a->next=c;
print(head);
//2.move
a->pre->next=a->next;
a->next->pre=a->pre;
print(head);
}