单链表的修改和删除

来源:互联网 发布:黑马程序员javaee培训 编辑:程序博客网 时间:2024/06/14 06:07

单链表建立和单链表的插入完了以后,如果要对链表进行修改和删除,用以下代码:

#include "stdafx.h"#include<iostream>#include<string>using namespace std;struct Student{string name;string score;Student *next;//定义了指向Candidate类型变量的指针};Student * Create(Student * head){Student *p = NULL;Student *node = NULL;int n;//cout << "请输入学生的总数:";cin >> n;for (int i = 1; i <= n; i++){node = new Student;cout << "请输入第" << i << "个同学的姓名:";cin >> node->name;cout << "请输入第" << i << "个同学的成绩:";cin >> node->score;if (head == NULL)head = node;elsep->next = node;p = node;if (i == n){p->next = NULL;}}return head;}void Print(Student * head){Student *p = NULL;p = head;cout << "链表已经建立!" << endl;cout << "\n==========下面输入刚才的数据=============\n" << endl;int i = 1;while (p != NULL){cout << "第" << i << "个同学===" << p->name << "==成绩====" << p->score << endl;p = p->next;i++;}cout << "\n" << endl;}void Insert(Student * head, int k){Student *p = NULL;Student *node = NULL;p = head;if (k == 1){node = new Student;cout << "第1位同学的名字:";cin >> node->name;cout << "第1位同学的成绩:";cin >> node->score;node->next = head->next;head = node;}int i = 1;while (p != NULL){if (i + 1 == k){node = new Student;cout << "第" << k << "位同学的名字:";cin >> node->name;cout << "第" << k << "位同学的成绩:";cin >> node->score;node->next = p->next;p->next = node;}p = p->next;i++;}}void Destory(Student * head){Student *d;Student *p = NULL;p = head;while (p != NULL){d = p;p = p->next;delete d;}}void Alter(Student * head, int k){int i = 1;Student *p = head;while (p != NULL){if (i == k){cout << "第" << k << "位同学的名字:";cin >> p->name;cout << "第" << k << "位同学的成绩:";cin >> p->score;}p = p->next;i++;}}Student * Delete(Student * head, int k){int i = 1;Student *p = head;Student *d = head;if (k == 1){head = head->next;}else{while (p != NULL){if (i + 1 == k){p->next = p->next->next;}p = p->next;i++;}}return head;}int main(){Student *head = NULL;//创建链表head = Create(head);//输出链表Print(head);//插入数据int k;cout << "请输入你要插入的同学的序号:";cin >> k;Insert(head, k);//输出链表Print(head);//修改链表cout << "请输入你要修改的同学的序号:";cin >> k;Alter(head, k);//输出链表Print(head);//删除其中的一个项cout << "请输入你要删除的同学的序号:";cin >> k;head = Delete(head, k);//输出链表Print(head);//销毁链表Destory(head);return 0;}



0 0