题目:
将一个单链表逆置输出
解题思路:
思路一:先找到最后一个,打印最后一个,然后指向链表最后一个指针前移,知道遇到链表第一个节点。时间复杂度O(n^2),空间复杂度O(1)
void PrintTail(SListNode *pFirst) { SListNode *end = NULL; while (end != pFirst){ SListNode *pNode = pFirst; while (pNode->pNext != end) { pNode = pNode->pNext; } printf("%d ", pNode->data); end = pNode; } printf("\n"); }
思路二:通过递归实现:
void PrintTailR(SListNode *pFirst) { if (pFirst == NULL) return; PrintTailR(pFirst->pNext); printf("%d ", pFirst->data); }