链表的建立、输出、逆序

本文介绍了一种使用C语言实现链表逆序的方法。通过定义链表结构体,并实现逆序函数,最后输出逆序前后的链表。适用于初学者理解和掌握链表的基本操作。

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

typedef struct tagListNode{
    int data;
    struct tagListNode* next;
}ListNode, *List;

void PrintList(List head);
List ReverseList(List head);

int main()
{
    //分配链表头结点
    ListNode *head;
    head = (ListNode*)malloc(sizeof(ListNode));
    head->next = NULL;
    head->data = -1;

    //将[1,10]加入链表
    int i;
    ListNode *p, *q;
    p = head;
    for(int i = 1; i <= 10; i++)
    {
        q = (ListNode *)malloc(sizeof(ListNode));
        q->data = i;
        q->next = NULL;
        p->next = q;
        p = q;        
    }

    PrintList(head);           /*输出原始链表*/
    head = ReverseList(head);  /*逆序链表*/
    PrintList(head);           /*输出逆序后的链表*/
    return 0;
}

List ReverseList(List head)
{
    if(head->next == NULL || head->next->next == NULL)  
    {
       return head;   /*链表为空或只有一个元素则直接返回*/
    }

    ListNode *t = NULL,
             *p = head->next,
             *q = head->next->next;
    while(q != NULL)
    {        
      t = q->next;
      q->next = p;
      p = q;
      q = t;
    }

    /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
    head->next->next = NULL;  /*设置链表尾*/
    head->next = p;           /*调整链表头*/
    return head;
}

void PrintList(List head)
{
    ListNode* p = head->next;
    while(p != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("/n");
}

转自  这里

 

### 逆序建立链表的方法 在山东理工大学的PTA平台上的数据结构课程中,对于链表的操作有详细的描述。当提到顺链表时,在最后一个节点之后插入新节点[^1];而逆序建立链表则有所不同。 为了实现在山东理工大学PTA平台上逆序创建单向链表,可以采用如下方式: #### 函数定义 编写函数`create_reversed_linked_list`用于接收输入并构建逆序链表。此过程通过循环读取用户输入直到结束条件满足为止,并将每个新的元素作为头部节点加入到现有的链表之前。 ```python class Node: def __init__(self, data=None): self.data = data self.next = None def create_reversed_linked_list(): head = None while True: try: value = int(input()) new_node = Node(value) new_node.next = head head = new_node except EOFError: break return head ``` 上述代码片段展示了如何利用Python来实现这一功能。每当获取一个新的数值后,就将其封装成一个`Node`对象,并设置该节点指向当前列表的第一个位置(即head),从而实现了链表按输入相反方向的增长。 #### 输出链表内容 为了让程能够展示最终形成的链表中的所有元素,还需要增加遍历打印的功能: ```python def print_linked_list(head): current = head while current is not None: print(current.data, end=' ') current = current.next print() ``` 这段辅助性的子程会从头至尾访问每一个节点并将它们的数据成员依次输出显示出来。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值