从尾到头打印单链表(递归与非递归)

非递归算法:
首先定义两个尾指针tail1和tail2,遍历链表使tail1指向链表的尾节点,然后输出数据,再使tail2等于tail1记录该节点,第二次遍历时使tail1指向tail2的前一个节点,输出数据,依次类推完成打印。
这里写图片描述
递归算法:
若该节点的下一个节点为空的时候直接打印,若不为空传入下一个节点为参数再次执行打印函数,完成递归。
代码实现:
结构体定义及函数声明:

typedef struct SListNode
{
    struct SListNode* _next;
    DataType _data;
}SListNode;
void SLitsPrintTailToHead(SListNode* pHead);//从尾到头打印
void SListPrintTailToHeadR(SListNode* pHead);//从尾到头打印 递归

函数实现:

void SLitsPrintTailToHead(SListNode* pHead)
{
    assert(pHead);
    SListNode* tail1=pHead;
    SListNode* tail2 = NULL;
    while (tail2 != pHead)
    {
        while (tail1->_next != tail2)
        {
            tail1 = tail1->_next;
        }
        printf("%d->", tail1->_data);
        tail2 = tail1;
        tail1 = pHead;
    }
    printf("\n");
}
void SLitsPrintTailToHeadR(SListNode* pHead)
{
    assert(pHead);
    if (pHead->_next != NULL)
    {

        SLitsPrintTailToHeadR(pHead->_next);
    }
    printf("%d->", pHead->_data);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值