链表是一种十分常见的数据结构,也是非常灵活的一种数据结构,应用十分广阔,在实际工作会经常用到,尤其保存映射关系时非常方便和灵活,经典的论坛拉链结构就是一种高效的和灵活的链表结构。
#include<iostream>
using namespace std;
struct node
{
int element;
node *next;
};
//创建长度为N的链表
node *create_list(int n)
{
if(n <= 0)
{
return NULL;
}
node *head = NULL;
node *p = new node;
if(p == NULL)
{
return NULL;
}
head = p;
while(--n)
{
node *q = new node;
if(q == NULL)
{
return NULL;
}
p->next = q;
p = q;
}
p->next = NULL;
return head;
}
//求出链表的长度
int list_length(const node* head)
{
int len = 0;
const node *p = NULL;
p = head;
while(p != NULL)
{
len++;
p = p->next;
}
return len;
}
//在第I个节点前面插入新的节点
bool insert_element(node* &head, int i, const int& element)
{
node *p = head;
int j = 0;
if(i == 1)
{
node *h = NULL;
h = new node;
if(h == NULL)
{
return false;
}
else
{
h->element = element;
h->next = head;
head = h;
return true;
}
}
while(p != NULL && j < i-2)
{
p = p->next;
j++;
}
if(p != NULL && j <= i-2)
{
node *new_node = new node;
if(new_node == NULL)
{
return false;
}
else
{
new_node->element = element;
new_node->next = p->next;
p->next = new_node;
return true;
}
}
return false;
}
//删除第i个节点
bool del_element(node* &head, int i)
{
if(i < 1)
{
return false;
}
else if(i == 1)
{
node *h = head;
head = head->next;
delete h;
return true;
}
else
{
int j = 0;
node *p = NULL;
node *t = NULL;
p = head;
while(p != NULL && j < i-1)
{
t = p;
p = p->next;
j++;
}
if(p != NULL && j <= i-1)
{
t->next = p->next;
delete p;
return true;
}
return false;
}
}
int main()
{
int n = 10;
node *head = create_list(n);
node *p = head;
int i = 0;
while(p != NULL)
{
p->element = i++;
p = p->next;
}
int e = 100;
if(insert_element(head, 11, e))
{
del_element(head, 1);
del_element(head, 5);
del_element(head, 9);
p = head;
while(p != NULL )
{
cout<<p->element<<' ';
p = p->next;
}
}
return 0;
}