1、从尾到头打印链表
2、删除一个无头链表的非尾结点
单链表结构以及Find函数参见 2016-1-2 13:56 发表博客
void Print_T_to_H(SListNode*&pHead)//从尾到头打印链表
{
//可用递归实现,以结点为空为结束条件
if (pHead != NULL)
{
Print_T_to_H(pHead->next);
printf("%d ", pHead->data);
}
}
void Del_N_tail(SListNode* pos) //删除一个无头链表的非尾结点
{
//当为空、尾时不删除
//思路:转换为删除pos的下一个结点,删除之前把值传给pos结点
if (pos->next)
{
pos->data = pos->next->data;
SListNode *tmp = pos->next;
pos->next = tmp->next;
free(tmp);
tmp = NULL;
}
}
void Test4()// Print_T_to_H/Del_N_tail
{
printf("//Test4() Print_T_to_H/Del_N_tail \n");
SListNode *LL = NULL;
PushBack(LL, 1);
PushBack(LL, 2);
PushBack(LL, 3);
PushBack(LL, 4);
PrintNode(LL);
Print_T_to_H(LL);
printf("\n");
Del_N_tail(Find(LL,3));//中间结点
Print_T_to_H(LL);
printf("\n");
Del_N_tail(Find(LL, 1));//首元结点
Print_T_to_H(LL);
printf("\n");
Del_N_tail(Find(LL, 4));//尾结点
Print_T_to_H(LL);
}