LinkList p=L; while(p->next) { if(p->next->d.num==k) { LinkList s=p->next; p->next=s->next; delete s; L->length--; cout<<"<<<<删除成功"<<endl; return; } p=p->next; } cout<<"<<<<删除失败,通讯录没有此联系人!"<<endl; }的意思
时间: 2024-02-16 10:16:40 浏览: 20
这段代码是一个删除链表中特定元素的函数,其中L是链表头结点,k是要删除的元素的值。函数的具体实现步骤是:
1. 遍历链表,查找值为k的元素。
2. 如果找到了,就将该节点从链表中删除。
3. 如果没有找到,输出提示信息。
具体来说,函数中的循环语句 `while(p->next)` 表示只要当前节点的下一个节点不为空,就继续遍历下去。在循环中,用 `if(p->next->d.num==k)` 判断下一个节点的值是否等于k,如果是,就将该节点从链表中删除,然后输出删除成功的提示信息。如果循环结束后仍然没有找到值为k的节点,就输出删除失败的提示信息。
需要注意的是,该函数只能删除链表中第一个值为k的节点,如果链表中有多个值为k的节点,只会删除第一个遇到的节点。
相关问题
解释这行代码Status WSeek(LinkList* pL, char* str) { int r = 1; LinkList p = *pL; if (p->next != NULL) { do { p = p->next; if (strcmp(p->data.word, str) == 0) { p->data.num++; return OK; } } while (p->next != NULL); } LNode* s = (LinkList)malloc(sizeof(LNode)); strcpy(s->data.word, str); s->data.num = 1; s->next = NULL; p->next = s; return OK; }
这段代码是一个函数,函数名为 WSeek,实现的功能是在单链表中查找一个字符串,如果找到了,则将该字符串对应节点的计数器加一;如果没有找到,则将该字符串插入到单链表的末尾,并且计数器初始化为1。
函数的参数是一个指向指针的指针,指向一个单链表的头节点,以及一个指向字符串的指针。
具体实现过程如下:
1. 首先定义一个变量 r 并初始化为1,表示后续要返回的状态码。
2. 定义一个指针 p 并初始化为指向单链表的头节点。
3. 判断单链表是否为空,如果不为空,进入循环,循环中每次将 p 指向下一个节点,然后比较该节点存储的字符串是否与要查找的字符串相等,如果相等,则将该节点计数器加一,然后返回状态码 OK。
4. 如果循环结束仍未找到要查找的字符串,则新建一个节点 s,并将要查找的字符串复制到 s->data.word 中,将计数器初始化为 1,然后将 s 插入到单链表的末尾(p->next = s)。
5. 返回状态码 OK。
//添加功能 void Create_LinkList(LinkList& L) { system("cls"); cout << "\t\t\t添加联系人功能" << endl; Node* t = L; int i = 1, flag = 1; while(t->next) { i++; t = t->next; } while (flag) { Node* p = new Node; cout<< "\t\t\t输入姓名:"; cin>> p->data.name; cout<< "\t\t\t输入性别:"; cin>> p->data.sex; cout<< "\t\t\t输入年龄:"; cin>>p->data.age; cout<< "\t\t\t输入电话:"; int m=1; while(m) { cin>>p->data.telephone; int n=p->data.telephone.length(); if(n!=11) { cout<< "\t\t\t输入格式错误,请重新输入:"; m=1; } else { for(int j=0;j<n;j++) { if(!(p->data.telephone[j]>='0' && p->data.telephone[j]<='9')) { cout<< "\t\t\t输入格式错误,请重新输入:"; m=1; break; } } m=0; } } cout << "\t\t\t输入地址:"; cin >> p->data.address; cout << "\t\t\t输入分组:"; cin >> p->data.relation; p->data.num = i++; p->next = NULL; t->next = p; t = t->next; Save(L); cout << "\t\t\t成功添加一次,选择是否继续本功能(1 是 0 否)" << endl; cout << "\t\t\t请选择【0-1】:"; cin >> flag; } }修改一下
void Create_LinkList(LinkList& L) {
system("cls");
cout << "\t\t\t添加联系人功能" << endl;
Node* t = L;
int i = 1, flag = 1;
while (t->next) {
i++;
t = t->next;
}
while (flag) {
Node* p = new Node;
cout << "\t\t\t输入姓名:";
cin >> p->data.name;
cout << "\t\t\t输入性别:";
cin >> p->data.sex;
cout << "\t\t\t输入年龄:";
cin >> p->data.age;
cout << "\t\t\t输入电话:";
int m = 1;
while (m) {
cin >> p->data.telephone;
int n = p->data.telephone.length();
if (n != 11) {
cout << "\t\t\t输入格式错误,请重新输入:";
m = 1;
}
else {
for (int j = 0; j < n; j++) {
if (!(p->data.telephone[j] >= '0' && p->data.telephone[j] <= '9')) {
cout << "\t\t\t输入格式错误,请重新输入:";
m = 1;
break;
}
}
m = 0;
}
}
cout << "\t\t\t输入地址:";
cin >> p->data.address;
cout << "\t\t\t输入分组:";
cin >> p->data.relation;
p->data.num = i++;
p->next = NULL;
t->next = p;
t = t->next;
Save(L);
cout << "\t\t\t成功添加一次,选择是否继续本功能(1 是 0 否)" << endl;
while (1) {
cout << "\t\t\t请选择【0-1】:";
cin >> flag;
if (flag == 0 || flag == 1) break;
else cout << "\t\t\t输入错误,请重新输入!" << endl;
}
}
}
修改后的代码加入了一个循环,可以防止用户输入非0和1的值。同时,将flag的赋值放到循环内部,可以保证每次循环结束时flag都被赋值为0或1,避免出现不确定的情况。