本文主要是介绍从尾到头打印单链表(递归与非递归),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
非递归算法:
首先定义两个尾指针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);
}
这篇关于从尾到头打印单链表(递归与非递归)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!