下面列举了单链表的常用操作
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
void Init(LinkList &L)
{
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
}
LinkList Reverse(LinkList re)
{
LinkList n;
n = (LinkList)malloc(sizeof(LNode));
n->next = NULL;
while (re->next != NULL)
{
LinkList cnt = (LinkList)malloc(sizeof(LNode));
cnt->data = re->next->data;
cnt->next = n->next;
n->next = cnt;
re = re->next;
}
return n;
}
LinkList GetItem(LinkList L, int i)
{
int j = 0;
while (L != NULL && j < i)
{
L = L->next;
j++;
}
return L;
}
bool ListDelete(LinkList &L, int i, LinkList &e)
{
LinkList p = L;
int j = 0;
while (p != NULL && j < i - 1)
{
p = p->next;
j ++;
}
if(p == NULL || p -> next == NULL) return false;
e->data=p->next->data;
p->next=p->next->next;
return true;
}
int main()
{
LinkList L;
Init(L);
LinkList curr = L;
for (int i = 1; i <= 5; i++)
{
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = i;
curr->next = s;
curr = s;
curr->next = NULL;
}
LinkList e = (LinkList)malloc(sizeof(LinkList));
ListDelete(L, 3, e);
LinkList re = L;
while (L->next != NULL)
{
cout << L->next->data << " --> ";
L = L->next;
}
cout << endl;
LinkList n = Reverse(re);
while (n->next != NULL)
{
cout << n->next->data << " --> ";
n = n->next;
}
return 0;
}