PTA 单链表遍历

本题要求实现一个函数,输出带头结点的单链表的的所有结点元素值。

void Traverse ( LinkList L );

其中LinkList结构定义如下:

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

L是带头结点的单链表的头指针。

裁判测试程序样例:


#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

LinkList Create ();/* 细节在此不表 */
void Traverse ( LinkList L );
int main()
{
    LinkList L = Create();
    Traverse(L);
    return 0;
}


/* 请在这里填写答案 */

输入样例:

输入是以-1结束的整数序列,-1不属于单链表元素,整数之间空格分隔。

2 1 4 5 3 -1

输出样例:

输出单链表所有元素,格式为每个整数后面跟一个空格。

2 1 4 5 3 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

void Traverse ( LinkList L )
{
    if(L==NULL)
    {
        return;
    }
    LNode *q = L->next;
    while(q){
        printf("%d ",q->data);
        q = q->next;
    }
}

### PTA平台单链表逆序算法实现方法 #### 使用堆栈方式逆转单链表 一种常见的单链表逆转的方法是利用堆栈的数据结构特性。此方法通过遍历整个列表并将每个节点压入堆栈,在完成遍历之后再次弹出这些节点来构建新的反转后的链表。该过程的时间复杂度为\( T=O\left( n \right) \)[^1]。 ```c void reverseListUsingStack(Node* head){ stack<Node*> s; Node *p = head; // Push all elements to the stack while (p != NULL){ s.push(p); p = p->next; } // Pop from stack and form reversed list p = s.top(); head = p; s.pop(); while (!s.empty()){ p->next = s.top(); s.pop(); p = p->next; } p->next = NULL; // End of new reversed linked list } ``` #### 原地逆转单链表 另一种直接在原有基础上修改指针方向从而达到翻转效果的技术被称为原地逆转。这种方式不需要额外的空间开销,只需要几个辅助变量即可完成操作。下面给出了一段具体的C语言代码片段用于演示如何执行这一逻辑[^2]: ```c List Reverse(List L) { List temp, tail; temp = tail = NULL; while (L) { tail = L; L = L->Next; // Prevent losing next node reference tail->Next = temp; temp = tail; // Move forward with current as previous } return temp; // Return new head which is old last element } ``` #### 头插法逆转带哨兵节点的单链表 对于带有头结点的情况,则可以采用头插法来进行处理。这种方法同样能够有效地改变链表顺序而无需借助其他数据结构的帮助。以下是具体的操作流程说明以及对应的源码展示[^3]: ```c List Reverse(List L) { if (L == NULL) return L; List temp = L->Next; L->Next = NULL; // Clear original links while (temp) { List p = temp; temp = temp->Next; p->Next = L; // Insert at front L = p; } return L; // New first node becomes former end } ``` 以上就是在PTA平台上可能遇到的不同类型的单链表逆转题目及其解决方案概览。每种方案都有各自的特点和适用场景,可以根据实际需求选择合适的方式来解决相应的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值