接上续...............
六、对单链表进行查找数据
SLNode* SLTFind(SLNode* phead, SLNDataType x)
{
SLNode* cur = phead;
while (cur)
{
if (cur->val == x)
return cur;
else
cur = cur->next;
}
return NULL;
}
七、在pos位置的前面插入数据
void SLTPushFront(SLNode** pphead, SLNDataType x)
{
SLNode* newnode = CreateNode(x);
newnode->next = *pphead;
*pphead = newnode;
}
SLNode* SLTFind(SLNode* phead, SLNDataType x)
{
SLNode* cur = phead;
while (cur)
{
if (cur->val == x)
return cur;
else
cur = cur->next;
}
return NULL;
}
void SLTInsert(SLNode** pphead, SLNode* pos, SLNDataType x)
{
assert(pphead);
assert(*pphead);
if (*pphead == pos)
SLTPushFront(pphead, x);
else
{
SLNode* prev = *pphead;
while (prev->next != pos)
prev = prev->next;
SLNode* newnode = CreateNode(x);
prev->next = newnode;
newnode->next = pos;
}
}
(一)相等
void Test2()
{
SLNode* plist = NULL;
SLTPushFront(&plist, 1);
SLTPushFront(&plist, 2);
SLTPushFront(&plist, 3);
SLTPrint(plist);
SLNode* pos = SLTFind(plist, 3);
SLTInsert(&plist, pos, 30);
SLTPrint(plist);
}
流程图:
(二) 不相等
void Test2()
{
SLNode* plist = NULL;
SLTPushFront(&plist, 3);
SLTPushFront(&plist, 1);
SLTPushFront(&plist, 2);
SLTPrint(plist);
SLNode* pos = SLTFind(plist, 3);
SLTInsert(&plist, pos, 30);
SLTPrint(plist);
}
流程图 :
八、删除当前在pos的位置节点
SLNode* plist = NULL;
SLTPushFront(&plist, 1);
SLTPushFront(&plist, 2);
SLTPushFront(&plist, 3);
SLTPrint(plist);
SLNode* pos = SLTFind(plist, 1);
SLTErase(&plist, pos);
SLTPrint(plist);
void SLTErase(SLNode** pphead, SLNode* pos)
{
assert(pphead);
assert(*pphead);
assert(pos);
if (*pphead == pos)
SLTPopFront(pphead);
else
{
SLNode* prev = *pphead;
while (prev->next != pos)
prev = prev->next;
prev->next = pos->next;
free(pos);
pos = NULL;
}
}
流程图:
九、在pos位置的后面插入数据
void SLTInsertAfter(SLNode* pos, SLNDataType x)
{
assert(pos);
SLNode* newnode = CreateNode(x);
newnode->next = pos->next;
pos->next = newnode;
}
流程图:
十、删除pos位置后面的节点
void SLTEraseAfter(SLNode* pos)
{
assert(pos);
assert(pos->next);
SLNode* tmp = pos->next;
pos->next = pos->next->next;
free(tmp);
tmp = NULL;
}
流程图:
十一、清空单链表
void SLTDestroy(SLNode** pphead)
{
assert(pphead);
SLNode* cur = *pphead;
while (cur)
{
SLNode* next = cur->next;
free(cur);
cur = next;
}
*pphead = NULL;
}