思路很简单,直接上代码
#include<iostream>
using namespace std;
typedef struct node
{
int val;
struct node* next;
struct node* pre;
}node;
void Init(node **head, node **tail)
{
(*head)=(node*)malloc(sizeof(node));
(*tail)=(node*)malloc(sizeof(node));
if((*head) == NULL || (*tail) == NULL)
return;
(*head)->val = 0;
(*head)->pre = NULL;
(*head)->next = (*tail);
(*tail)->val = 0;
(*tail)->next = NULL;
(*tail)->pre = (*head);
}
void head_insert(node* head, node* tail, int num)
{
node* pTemp_head = head;
node* pTemp_tail = tail;
node* newnode = (node*)malloc(sizeof(node));
if(newnode == NULL)
return;
newnode->val = num;
newnode->pre = pTemp_head;
newnode->next = pTemp_head->next;
pTemp_head->next->pre = newnode;
pTemp_head->next = newnode;
}
void delete_node(node* head, node* tail, int num)
{
node* tmp = head;
node* del_node = NULL;
tmp = tmp->next; //跳过头节点的0
while(tmp)
{
if(tmp->val == num)
{
del_node = tmp;
break;
}
tmp = tmp->next;
}
del_node->next->pre = del_node->pre;
del_node->pre->next = del_node->next;
free(del_node);
}
void head_print(node* head)
{
node *temp = head;
if(temp)
{
printf("%d",temp->val);
temp = temp->next;
}
while(temp)
{
printf("->%d",temp->val);
temp = temp->next;
}
puts("");
}
void tail_print(node* tail)
{
node *temp = tail;
if(temp)
{
printf("%d",temp->val);
temp = temp->pre;
}
while(temp)
{
printf("->%d",temp->val);
temp = temp->pre;
}
puts("");
}
int main()
{
node* head;
node* tail;
Init(&head,&tail);
for(int i = 1; i <= 10; ++i)
head_insert(head,tail,i);
printf("head printf:\n");
head_print(head);
for(int i = 4; i <= 6; ++i)
delete_node(head,tail,i);
printf("\nafter delete:\n");
head_print(head);
printf("\ntail printf:\n");
tail_print(tail);
return 0;
}
结果: