序言
结构如下插入逻辑
图解code 删除
图解code 链表反转
图解 code函数一览
序言
单向链表(单链表)是线性表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。
结构如下
插入逻辑
图解
code
bool insert_element_slist(Node
*pHead, int pos, ELEMENT
data) {
Node
*tempNode
= pHead;
if (pHead
== NULL) {
return false;
}
if (pos
== 1) {
Node
*newNode
= malloc(sizeof(Node));
newNode
->next
= tempNode
->next;
newNode
->data = data;
tempNode
->next
= newNode;
return true;
}
tempNode
= get_element_slist(tempNode, pos
- 1);
if (tempNode
== NULL) {
return false;
}
Node
*newNode
= malloc(sizeof(Node));
newNode
->data = data;
newNode
->next
= tempNode
->next;
tempNode
->next
= newNode;
return true;
};
删除
图解
code
bool del_element_slist(Node
*pHead, int pos, ELEMENT
*pData) {
if (pHead
== NULL) {
printf(
"del_element_slist head is null");
return false;
}
if (pos
== 1) {
Node
*freeNode
= pHead
->next;
if (freeNode
== NULL) {
printf(
"del node is null when pos = 1");
return false;
}
pHead
->next
= freeNode
->next;
*pData
= freeNode
->data;
free(freeNode);
freeNode
= NULL;
return true;
}
PNode tempNode
= pHead;
tempNode
= get_element_slist(tempNode, pos
- 1);
if (tempNode
== NULL) {
return false;
}
Node
*freeNode
= tempNode
->next;
if (freeNode
== NULL) {
return false;
}
tempNode
->next
= tempNode
->next
->next;
*pData
= freeNode
->data;
free(freeNode);
return true;
}
链表反转
图解
反转前
反转后
code
Node
*reverse_slist(Node
*pHead) {
if (
!pHead) {
return NULL;
}
Node
*pNow
= pHead;
Node
*pPre
= NULL;
Node
*pNext
= NULL;
Node
*pTail
= NULL;
while (pNow
!= NULL) {
pNext
= pNow
->next;
if (pNext
== NULL) {
pTail
= pNow;
}
pNow
->next
= pPre;
pPre
= pNow;
pNow
= pNext;
}
pHead
->next
= NULL;
return pTail;
};
函数一览
void init_slist(PNode
*pHead);
bool is_emppy_slist(Node
*pHead);
bool insert_element_slist(Node
*pHead,
int pos, ELEMENT data);
bool del_element_slist(Node
*pHead,
int pos, ELEMENT
*pData);
PNode get_element_slist(PNode pHead,
int pos);
void clear_slist(Node
*pHead);
void destroy_slist(Node
*pHead);
int get_length_slist(Node
*pHead);
void print_slist(Node
*pHead);
Node
*reverse_slist(Node
*pHead);
Node
*reverse_slist_plus(Node
*pHead);
引用: http://blog.csdn.net/xyh269/article/details/70238501 http://www.cnblogs.com/QG-whz/p/5170147.html
code地址: https://github.com/HumorSmith/DataStructure/tree/master/link_list