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);
}


wKioL1aIhVeyVdXBAAAgIAzllXw963.png