单链表操作
2016-10-16 10:29
120 查看
#include <iostream> using namespace std; struct Node { int data; Node* next; }; Node* create() { Node *head = new Node(); head->data = 0; head->next = NULL; for (int i = 10; i > 0; --i) { Node *temp = new Node(); temp->data = i; temp->next = NULL; temp->next = head->next; head->next = temp; } return head; } void print(Node *head) { while (head != NULL) { cout << head->data << " "; head = head->next; } cout << endl; } Node* findLastNode(Node* head, int data) { while (head != NULL && head->data != data) { head = head->next; } return head; } void deleteNode(Node* head, Node* del) { if (del->next != NULL) { del->data = del->next->data; del->next = del->next->next; } else//删除的是最后节点 { Node* pre = findLastNode(head, 9); pre->next = pre->next->next; } } bool insertNode(Node* head, int new_value) { Node *previous; Node *newNode; previous = nullptr; //顺序访问、当其值大于或等于时创建新节点 while (head != nullptr && head->data < new_value) { previous = head; head = head->next; } newNode = (Node*)malloc(sizeof(Node)); if (NULL == newNode) { return false; } newNode->data = new_value; newNode->next = head;//head 已经变成了head->next\当传入的值为12是head==nullptr if (previous == nullptr)//previous保存的head { head = newNode;//插入在表头 } else { previous->next = newNode;//插入在表尾 } return true; } int main(int argc, char *argv[]) { Node *head = create(); print(head); Node *delNode = findLastNode(head, 8); deleteNode(head, delNode); print(head); Node *del = findLastNode(head, 10); deleteNode(head, del); print(head); //列表的插入 insertNode(head, 12); print(head); cin.get(); return 0; }