// temp2.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <malloc.h> struct Node { Node *m_last; //上一个节点 Node *m_next; //下一个节点 int m_data; //节点存储的值 void NodeAdd(Node **head, Node **end, int data); //添加一个节点 void NodeErase(Node **head, Node **end,int data);//删除指定值的节点 void NodeDelete(Node **head, Node **end); //删除所有的节点 void display(Node **head); //顺序输出 void redisplay(Node **end); //倒序输出 }; void Node::NodeAdd(Node **head, Node **end, int data) { if(*head == NULL) { *head = *end = new Node; (*head)->m_next = NULL; (*head)->m_last = NULL; (*head)->m_data = data; } else { (*end)->m_next = new Node; (*end)->m_next->m_data = data; (*end)->m_next->m_last = *end; (*end) = (*end)->m_next; (*end)->m_next = NULL; } } void Node::NodeErase(Node **head, Node **end, int data) { if(*head == NULL) { return; } else if((*head)->m_data == data) { Node *temp = *head; *head = (*head)->m_next; delete temp; (*head)->m_last = NULL; return; } else if((*end)->m_data == data) { Node *temp = *end; *end = (*end)->m_last; delete temp; (*end)->m_next = NULL; return; } else { for(Node *temp1, *temp2 = *head; temp2->m_next != NULL; temp2 = temp2->m_next) { if(temp2->m_next->m_data == data) { temp1 = temp2->m_next; temp2->m_next = temp2->m_next->m_next; temp2->m_next->m_last = temp2; delete temp1; break; } } return; } } void Node::display(Node **head) { Node *temp = *head; while(temp != NULL) { printf("%d/n", temp->m_data); temp = temp->m_next; } printf("/n"); } void Node::redisplay(Node **end) { Node *temp = *end; while(temp != NULL) { printf("%d/n", temp->m_data); temp = temp->m_last; } printf("/n"); } void Node::NodeDelete(Node **head, Node **end) { Node *temp = NULL; while((*head)->m_next != NULL) { temp = *head; *head = (*head)->m_next; delete temp; } *head = *end = NULL; } void main() { Node *head = NULL; Node *end = NULL; head->NodeAdd(&head, &end, 1); head->NodeAdd(&head, &end, 2); head->NodeAdd(&head, &end, 3); head->NodeAdd(&head, &end, 4); head->NodeAdd(&head, &end, 5); head->NodeAdd(&head, &end, 6); head->NodeAdd(&head, &end, 7); head->NodeAdd(&head, &end, 8); head->NodeAdd(&head, &end, 9); head->NodeErase(&head, &end, 4); head->NodeErase(&head, &end, 7); head->NodeErase(&head, &end, 7); head->NodeErase(&head, &end, 9); head->NodeErase(&head, &end, 9); head->NodeErase(&head, &end, 2); head->NodeErase(&head, &end, 19); head->display(&head); head->NodeAdd(&head, &end, 6); head->NodeAdd(&head, &end, 9); head->NodeAdd(&head, &end, 10); head->NodeAdd(&head, &end, 12); head->NodeAdd(&head, &end, 19); head->NodeAdd(&head, &end, 19); head->NodeErase(&head, &end, 4); head->NodeErase(&head, &end, 7); head->NodeErase(&head, &end, 2); head->NodeErase(&head, &end, 5); head->NodeErase(&head, &end, 9); head->NodeErase(&head, &end, 2); head->NodeErase(&head, &end, 19); head->redisplay(&end); head->NodeDelete(&head, &end); head->display(&head); }