定义链表的节点
struct ListNode //定义单链表节点
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
利用头插法建立单链表,将心节点插入单链表的表头
//头插法建立单链表,将新节点插入到当前链表的表头上
void CreateListF(ListNode * &L, int a[], int n)
{
ListNode *s;
L = (ListNode*)malloc(sizeof(ListNode));
L->next = NULL;
for (int i = 0; i < n; i++)
{
s = (ListNode*)malloc(sizeof(ListNode));
s->val = a[i];
s->next = L->next;
L->next = s;
}
}
尾插法建立单链表,将新节点插入到当前链表的尾部
//尾插法建立单链表,将新节点插入到当前链表的尾部
void CreateListF(ListNode * &L, int a[], int n)
{
ListNode *s, *r;
L = (ListNode*)malloc(sizeof(ListNode));
r = L;
for (int i = 0; i < n; i++)
{
s = (ListNode*)malloc(sizeof(ListNode));
s->val = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}
销毁链表
void DestroyList(ListNode * &L) //销毁单链表
{
ListNode*pre = L, *p = p->next;
while (p != NULL)
{
free(pre);
pre = p;
p = pre->next;
}
free(pre);
}
初始化链表
void InitList(ListNode * &L)
{
L=(ListNode *)malloc(sizeof(ListNode));
L->next=NULL;
}
求链表长度
int ListLength(ListNode *L)
{
int n = 0;
ListNode *p = L;
while (p->next != NULL)
{
n++;
p = p->next;
}
return n;
}
删除数据元素
bool ListDelete(ListNode * &L, int i,int &e)
{
if (i == 0)
{
L = L->next;
return L;
}
int j = 0;
ListNode *p = L, *q;
while (j < i - 1 && p != NULL)
{
j++;
p = p->next;
}
if (p == NULL)
return false;
else
{
q = p->next;
if (q == NULL)
return false;
e = q->val;
p->next = q->next;
free(q);
return true;
}
}
输出链表
void DisplayList(ListNode *L)
{
if (L == NULL) cout << " ";
else
{
ListNode *p = L->next;
while (p != NULL)
{
cout << p->val << " ";
p = p->next;
}
}
}