#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
void listHeadInsert(LinkList& L);
void printLinkList(LinkList& L);
void listTailInsert(LinkList& L);
int getElemByIndex(LinkList L, int i);
int getListLength(LinkList L);
LNode* getNodeBydata(LinkList L, int data);//按值查找结点
bool delNode(LinkList& L, int i);
void insertNode(LinkList& L, int i, int data);
int main()
{
LinkList l;
//listHeadInsert(l);
listTailInsert(l);
printLinkList(l);
delNode(l, 2);
printLinkList(l);
insertNode(l, 2, 1000);
printLinkList(l);
//printf("\n%d", getElemByIndex(l, 3));
//printf("\n单链表长度为%d", getListLength(l));
}
void listHeadInsert(LinkList& L) {
//创建头结点
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
LNode* s; int x;
scanf("%d", &x);
while (x != 9999) {
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = L->next;
L->next = s;
scanf("%d", &x);
}
}
void listTailInsert(LinkList& L) {
//创建头结点
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
//创建一个表尾指针
LNode* r = L;
LNode* s; int x;
scanf("%d", &x);
while (x != 9999) {
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
//s->next = NULL;//这一步重复了,可以等全部插入完之后再将表尾指针指向的节点的尾指针置为NULL
r->next = s;
r = s;
scanf("%d", &x);
}
r->next = NULL;
}
void printLinkList(LinkList& L) {
LNode* p = L;
while (p->next) {
p = p->next;
printf("\n%d", p->data);
}
}
int getElemByIndex(LinkList L, int i) {
LNode* p = L;
int j = 0;
while (p->next) {
p = p->next;
j++;
if (i == j) {
return p->data;
}
}
return 0;
}
LNode* getNodeBydata(LinkList L, int data) {
LNode* p = L;
while (p->next) {
p = p->next;
if (data == p->data) {
return p;
}
}
return NULL;
}
int getListLength(LinkList L) {
int length = 0;
LNode* p = L;
while (p->next) {
length++;
p = p->next;
}
return length;
}
bool delNode(LinkList& L, int i) {
//判断i合法性
if (i<1 || i>getListLength(L)) {
return false;
}
LNode* p = L;
int j = 0;
while (p->next) {
if (j + 1 == i) {
//找到了i的前驱结点
LNode* temp = p->next;
p->next = p->next->next;
free(temp);
}
//不是前驱结点再往后找
p = p->next;
j++;
}
}
void insertNode(LinkList& L, int i, int data) {
if (!(i<1 || i>getListLength(L) + 1)) {
LNode* p = L;
int j = 0;
while (j + 1 != i) {
p = p->next;
j++;
}
LNode* s = (LNode*)malloc(sizeof(LNode));
s->data = data;
s->next = p->next;
p->next = s;
}
}
带头结点的单链表基础操作--考研复习03
最新推荐文章于 2024-05-21 22:55:36 发布