前面我们已经学习了单链表的存储结构以及一些基本操作,但是在实际运用中,我们还会涉及到其他一些需求。下面我们针对不同需求做一下整理。
输出列表中倒数第i个元素的值
下面算法通过两次遍历的方式巧妙的实现了查找链表中倒数第i个元素的功能,实现代码如下:
/*输出链表中倒数第i个元素的值*/
Status GetEelemTail(LinkList L, int i, Elemtype *e)
{
if (L->next == NULL || i == 0)
{
return ERROR;
}
LinkList pAhead = L->next;
LinkList pBehind = L->next;
int j = 1;
while (pAhead && j < i)
{
pAhead = pAhead->next;
++j;
}
if (!pAhead || j > i)
{
return ERROR;
}
while (pAhead->next != NULL)
{
pAhead = pAhead->next;
pBehind = pBehind->next;
}
*e = pBehind->data;
return OK;
}
单链表反转
/*反转单链表L*/
void ReverseList(LinkList L)
{
if (L->next == NULL || L->next->next == NULL)
{
return;
}
LinkList p = L->next;
LinkList q = p->next;
LinkList r;
p->next = NULL;
while (q)
{
r = q->next;
q->next = p;
p = q;
q = r;
}
L->next = p;
}