#include <iostream>
// 带头结点单链表.cpp : Defines the entry point for the console application.
//
using namespace std;
#include<stdlib.h>
typedef struct node {
int data;
struct node* link;
}LinkLnode, * LinkList;
void initlist(LinkList& first)
{
first = new LinkLnode;
first->link = NULL;
}
void clearlist(LinkList& first)//清空单链表,只保留头结点
{
LinkList q;
while (first->link != NULL)
{
q = first->link;
first->link = q->link;//从链上摘取该节点,first->link存放后面节点的地址
free(q);
}
}
int length(LinkList first)
{
LinkList p= first->link; int k = 0;
while (p)
{
k++;
p = p->link;
}
return k;
}
LinkList locate(LinkList& first, int i)
{
if (i < 0)return NULL;
LinkList p = first; int k = 0;
while (p && k < i)
{
p = p->link;
k++;
}
return p;
}
int insert(LinkList& first, int i,int x)
{
LinkList p = locate(first,i-1);
if (p == NULL)
{
cout << "insert,,,,p=NULL时i=" << i << endl;
return 0;
}
LinkList s = new LinkLnode;
s->data = x;
s->link = p->link;
p->link = s;
return 1;
}
int remove(LinkList& first, int i, int x)
{
LinkList p = locate(first,i-1);
if(p==NULL)
{
cout << "remove,,,,p=NULL时i=" << i << endl;
return 0;
}
if (p->link == NULL)
{
cout << "remove,,,,p->link==NULL时i=" << i << endl;
return 0;
}
LinkList q = p->link;
p->link = q->link;
x = p->data;
free(q);
return 1;
}
int print(LinkList first)
{
LinkList p = first->link;
while (p)
{
cout << p->data << endl;
p = p->link;
}
return 0;
}
void printlist(LinkList first)
{
if (first == NULL)
return;
printf("%d ",first->data);
printlist(first->link);
}
void printlistfanxiang(LinkList first)//反向输出
{
if (first == NULL)
return;
printlist(first->link);
printf("%d ", first->data);
}
void listdelete(LinkList& l, int i)
{
LinkList p = l; int j =
李冬梅老师单链表删除---条件的一点解释(主题 阅读示例)
于 2024-10-06 20:50:42 首次发布