带有头节点和尾节点的链表的头插和尾插
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int val;
Node* next;
Node(int _val):val(_val),next(NULL){ }
};
struct Node* head = new Node(-1);
struct Node* tail = new Node(-2);
void add_tail(int a)
{
auto t = new Node(a);
t->next = tail;
tail->next->next = t;
tail->next = t;
}
void add_head(int a)
{
auto t = new Node(a);
t->next = head->next;
head->next = t;
}
int main()
{
head->next = tail;
tail->next = head;
int cnt = 3;
while (cnt--)
{
int a;
cin >> a;
add_tail(a);
}
cnt = 2;
while (cnt--)
{
int a;
cin >> a;
add_head(a);
}
for (auto p = head->next; p!=tail; p = p->next)
{
cout << p->val << "->";
}
}
不带头结点的
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int val;
Node* next;
Node(int _val):val(_val),next(NULL){ }
};
struct Node* head;
struct Node* tail;
void add_tail(int a)
{
//auto t = new Node(a);
//t->next = tail;
//tail->next->next = t;
//tail->next = t;
auto t = new Node(a);
tail->next = t;
tail = t;
}
void add_head(int a)
{
//auto t = new Node(a);
//t->next = head->next;
//head->next = t;
auto t = new Node(a);
t->next = head;
head = t;
}
int main()
{
auto t = new Node(0);
head = tail = t;
int cnt = 3;
while (cnt--)
{
int a;
cin >> a;
add_tail(a);
}
cnt = 2;
while (cnt--)
{
int a;
cin >> a;
add_head(a);
}
// for (auto p = head->next; p != tail; p = p->next) 带有头尾节点的
for (auto p = head; p; p = p->next)
{
cout << p->val << "->";
}
}