无表头单链表的总结----删除节点

 1 #include "head.h"
 2 struct Student*del(struct Student*head,char num[N])
 3 {
 4     struct Student*p1, *p2;
 5     if (head == NULL)                  //若链表为空,则无需处理
 6     {
 7         printf("\nlist NULL!\n");
 8         return (head);
 9     }
10     p2 = p1 = head;
11     while (strcmp(num, p1->nun) != 0 && p1->next != NULL)//重要!循环终止的条件是找到
12 //了要删除的节点或者搜寻到了最后一个节点
13     {
14         p2 = p1;         //循环中若,没找到,则指针往后移一位
15         p1 = p1->next;
16     }
17     if (strcmp(num, p1->nun) == 0)   //循环结束分两种情况,1是找到,找到也分两种情况
18     {
19         if (p1 == head) head = p1->next;   //第一个节点就是我们要找到
20         else    p2->next = p1->next;         //除第一节点外的处理方式(包括末尾节点)
21         printf("delete:%s\n", p1->nun);
22         n--;       //删除一个就要成员数减一个;
23     }
24     else printf("%s not been found!\n", num);     //2,没找到怎完事
25     return head;
26 }
时间: 2024-09-30 04:23:11

无表头单链表的总结----删除节点的相关文章

无表头单链表的总结----增加节点(原链表为有序的链表)

1 #include"head.h" 2 struct Student* insert(struct Student*head, struct Student*addinfo) 3 { 4 struct Student *p0, *p1, *p2; //开辟三个结构体指针 5 p2=p1 = head; //头指针赋给p1,p2 6 p0 = addinfo; //把 增加信息的指针赋给p0,习惯不用原来指针 7 if (head == NULL) 8 { 9 head = p0 //

无表头单链表的总结----从链表中删除某一个年纪的的节点

1 #include "head.h" 2 struct Student *del_same_age(struct Student*head, int age) 3 { 4 struct Student *p, *pt; int find = 0; 5 p = pt = head; 6 while (p != NULL)//当循环到最后一个节点时 7 { 8 9 if (p->stu_age == age)//如果相等 10 { 11 find++; //说明找到了 12 if

无表头单链表的总结----无限删除和无限插入(在主函数里实现)

1 #include"head.h" 2 int main() 3 { 4 struct Student *head; 5 struct Student *addinfo; 6 printf("请输入信息(101 wang f s 501)(以"0 0 0 s 0"作为结束标志):\n"); 7 head = input(); 8 print(head); 9 char del_num[N]; 10 printf("请输入要删除的号码(

单链表中实现删除节点

根据给定的数值,遍历链表,删除对应节点有两种可能: ①:找到一个节点的data域为给定的数值,删除这个节点,函数返回.实现代码如下: /*Delete one node of given value void DeleteOneNodeFromList(Node **pList,int value){ Node *pCurrent; while((pCurrent=*pList)!=NULL && pCurrent->data != value) { pList = &(pC

无表头单链表的总结----两个链表合并

#include"head.h" struct Student* insert(struct Student*ahead, struct Student*bhead) { struct Student *pa1, *pa2, *pb1, *pb2; pa1 = pa2 = ahead; pb1 = pb2 = bhead; if ((ahead != NULL)&&(bhead != NULL)) { do { while ((pb1->num > pa1-

无表头单链表的总结----如何将已经初始化的结构体数组加入链表关系

1 struct Student 2 { 3 char ID[N_ID]; 4 char name[N_name]; 5 struct Student *next; 6 }alist[LEN_A],blist[LEN_B]; 7 ////以上是结构体 8 //初始化 9 struct Student alist[LEN_A] = { {"101","Wang"} ,{"102","Li"},{"105",&

无表头单链表的总结----输出链表

#include"head.h" void print(struct Student* head) { struct Student *p; printf("There are %d records:\n", sum); p = head; if (p != NULL) { do { printf("%ld %d\n", p->num, p->score); p = p->next; } while (p != NULL); /

无表头单链表的总结----动态建立链表

1 #include "head.h" 2 struct Student *creat() 3 { 4 struct Student *head, *p1, *p2;// 先开辟三个结构体指针,*head,(作为返回的头指针) 5 p1 = p2 =(struct Student *) malloc(LEN); 6 scanf_s("%s %f", p1->num, N, &p1->score);//先读取输入的信息,据读入的信息进行判断 7 h

C语言:【单链表】删除一个无头单链表的非尾节点

#include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct SListNode {     DataType data;     struct SListNode* next;  }SListNode; SListNode* BuyNode( DataType x) {     SListNode* next = (SListNode*)mall