您的位置:首页 > 其它

链表从尾到头输出及其扩展

2011-08-31 16:19 106 查看
题目:输入一个链表(无环单链表)的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:
typedef struct listNode
{
struct listNode* next;
int data;
}Node;

方法有多种:

方法1. 链表逆序,然后遍历输出,改变了链表指针,而且操作麻烦.

方法2. 利用栈先进后出的特性, 需要销号额外空间,增加出栈入栈代码.

方法3. 原理同方法2, 用递归的方法. 操作简便.

/* 方法1: 先链表逆序,再遍历输出 */
Node* reverseList(Node* head)
{
Node* pReversedHead = NULL;
Node* cursor = head;
while(cursor != NULL)
{
Node* next = cursor->next;
if(NULL == pReversedHead){
cursor ->next = NULL;
}else {
cursor->next = pReversedHead;
}
pReversedHead = cursor;
cursor = next;
}
cursor = pReversedHead;
while(p!=NULL)
{
printf("%d  ", p->data);
p = p->next;
}
printf("\n");
return pReversedHead;
}

/* 方法2: 利用栈实现 */
void reverseOutput2(Node* head)
{
Node* cursor = head;
while(p!=NULL)
{
stack_push(p->data);
p = p->next;
}
while( !stack_is_empty() )
{
int tmp = stack_pop();
printf("%d  ", tmp);
}
printf("\n");
}

/* 方法3: 递归调用 */
void reverseOutput2(Node* head)
{
if(NULL != head) {
reverseOutput(head->next);
printf("%d  ", head->data);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: