系列文章目录
前言
《数据结构基础》c语言版 第2版,Ellis Horowitz著,朱仲涛译
4.2节,page120,习题5
一、题目描述
假设p指向一个单链表的头结点,编写函数,从表头开始,删除表中1,3,5,…,奇数号结点。讨论算法的复杂度。
二、c++代码
1.c++代码
代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct Node{
int data;
struct Node *link;
}listNode;
listNode* create_list(int length)
{
if(length<1)
{
printf("链表中没有元素!\n");
}
listNode *first = (listNode*)malloc(sizeof(listNode));
first->link = NULL;
listNode *p = first;
int value;
printf("请输入%d个整数:\n",length);
for(int i=1;i<=length;i++)
{
listNode *temp = (listNode*)malloc(sizeof(listNode));
scanf("%d",&value);
temp->data = value;
p->link=temp;
p = temp;
}
p->link = NULL;
return first;
};
void del_odd(listNode* list)
{
listNode *pre = list;
listNode *next = pre->link;
while (next!=NULL)
{
pre->link = next->link;
free(next);
pre = pre->link;
if(pre==NULL)
break;
next = pre->link;
}
}
void print_list(listNode* list)
{
listNode *tmp;
tmp = list->link;
if(tmp==NULL) {
printf("链表中没有元素!\n");
return;
}
while (tmp)
{
printf("%2d",tmp->data);
tmp = tmp->link;
}
}
int main() {
listNode * L;
int n;
printf("输入链表的长度:");
scanf("%d",&n);
L = create_list(n);
del_odd(L);
printf("删除之后的链表为:\n");
print_list(L);
return 0;
}