单链表基础操作
#include <iostream>
#include <time.h>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
typedef struct Node *LinkList;
void CreateListHead(LinkList *L, int n)
{
LinkList p;
int i;
*L = new Node;
(*L)->next = NULL;
for (i = 0; i < n; i++) {
p = new Node();
p->data = i;
p->next = (*L)->next;
(*L)->next = p;
}
}
void CreateListTail(LinkList *L, int n)
{
LinkList p, r;
int i;
*L = new Node;
r = *L;
for (i = 0; i < n; i++) {
p = new Node;
p->data = i;
r->next = p;
r = p;
}
r->next = NULL;
}
void GetData(LinkList L, int i, int *data)
{
LinkList p;
p = L->next;
int j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
{
cout << "the data is not find" << endl;
return;
}
*data = p->data;
}
void ListInsert(LinkList *L, int i, int data)
{
LinkList p, s;
p = *L;
int j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
{
cout << "not exist" << endl;
return;
}
s = new Node();
s->data = data;
s->next = p->next;
p->next = s;
}
void ListDelete(LinkList *L, int i)
{
LinkList p, s;
p = *L;
int j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
{
cout << "not exist" << endl;
}
s = p->next;
p->next = s->next;
delete(s);
}
void ClearList(LinkList *L)
{
LinkList p, q;
p = (*L)->next;
while (p)
{
q = p->next;
delete(p);
p = q;
}
(*L)->next = NULL;
cout << "delete completed" << endl;
}
void PrintList(LinkList L)
{
LinkList p;
p = L->next;
if (!p)
{
cout << "List is empty" << endl;
}
while (p)
{
cout << p->data<<endl;
p = p->next;
}
}
循环链表基础操作
#include <iostream>
#include <time.h>
using namespace std;
struct Node
{
int data;
struct Node *next;
};
typedef struct Node *LinkList;
void CreateListTail(LinkList *L, int n)
{
LinkList p, r;
int i;
*L = new Node;
r = *L;
for (i = 0; i < n; i++) {
p = new Node;
p->data = i;
r->next = p;
r = p;
}
r->next = *L;
}
void TailPtr(LinkList L, LinkList *rear)
{
LinkList p;
p = L->next;
while (p->next != L)
{
p = p->next;
}
*rear = p;
}
void MergeList(LinkList *L1, LinkList *L2)
{
LinkList p, q, rear1, rear2;
TailPtr(*L1, &rear1);
TailPtr(*L2, &rear2);
p = rear1->next;
rear1->next = rear2->next->next;
q = rear2->next;
rear2->next = p;
delete(q);
}