系列文章目录
前言
《数据结构基础》c语言版 第2版,Ellis Horowitz著,朱仲涛译
4.2节,page120,习题3
一、题目描述
在单链表中删除整数num结点
二、c++代码
代码如下:
#include <iostream>
#include <stdio.h>
using namespace std;
typedef struct listNode{
int data;
struct listNode *link;
}listNode;
listNode* create_list(int length)
{
if(length<1)
printf("该链表没有元素!\n");
listNode *first = new listNode;
first->link = NULL;
listNode *p = first;
for(int i=1;i<=length;i++)
{
listNode *temp = new listNode;
temp->data = i+1;
temp->link = NULL;
p->link = temp;
p = temp;
}
return first;
};
listNode* del_num(listNode* list,int target)
{
if(list->link==NULL){
printf("该链表为空!\n");
return list;
}
if(list->link->data == target)
{
list->link = list->link->link;
return list;
}
listNode *pre = list;
listNode *cur = list->link;
while (cur!=NULL && cur->data!=target)
{
pre = cur;
cur = cur->link;
}
if(cur!=NULL)
{
pre->link = cur->link;
free(cur);
}
return list;
}
void print_list(listNode* list)
{
listNode *tmp;
tmp = list->link;
if(tmp==NULL) {
printf("链表中没有元素!\n");
return;
}
while (tmp)
{
printf("%3d",tmp->data);
tmp = tmp->link;
}
printf("\n");
}
int main() {
listNode *L;
int len;
int num;
printf("输入要创建链表的长度:");
scanf("%d",&len);
L = create_list(len);
printf("创建的链表为:\n");
print_list(L);
printf("输入要删除的数:");
scanf("%d",&num);
listNode *new_L;
new_L = del_num(L,num);
printf("删除后的链表为:\n");
print_list(new_L);
return 0;
}