单链表就地逆置 - C语言实现

**结点定义如下:**ctypedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;

问题描述:

创建单链表,输入单链表的数据元素,以-1结束。利用原有结点实现单链表的就地逆置,输出逆置后的单链表。

输入形式:

1 2 3 4 5 6 7 8 9 10 -1

输出形式:

10 9 8 7 6 5 4 3 2 1

样例输入:

1 2 3 4 5 6 7 8 9 10 -1

样例输出:

10 9 8 7 6 5 4 3 2 1

样例说明:

输入的数据元素是1,2,3,4,5,6,7,8,9,10。将它们插入单链表中后,就地逆置单链表,输出逆置后的结果。

**代码实现:**c#include <stdio.h>#include <stdlib.h>

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

// 创建单链表LinkList createList(){ LinkList head = NULL, p, q; int data; scanf('%d', &data); while(data != -1){ p = (LNode*)malloc(sizeof(LNode)); p->data = data; p->next = NULL; if(head == NULL){ head = p; }else{ q->next = p; } q = p; scanf('%d', &data); } return head;}

// 就地逆置单链表void reverseList(LinkList head){ if(head == NULL || head->next == NULL){ return; } LinkList pre = NULL, cur = head, next = head->next; while(cur != NULL){ next = cur->next; cur->next = pre; pre = cur; cur = next; } head = pre;}

// 打印单链表void printList(LinkList head){ while(head != NULL){ printf('%d ', head->data); head = head->next; } printf(' ');}

int main(){ LinkList head = createList(); reverseList(head); printList(head); return 0;}

代码说明:

  1. createList() 函数用于创建单链表,从标准输入读取数据,以 -1 结束输入。2. reverseList() 函数实现单链表的就地逆置。使用三个指针 precurnext,分别指向当前结点的前一个结点、当前结点和下一个结点。通过改变指针指向,将链表的连接方式反转。3. printList() 函数用于打印单链表。

运行结果:

输入:1 2 3 4 5 6 7 8 9 10 -1

输出:10 9 8 7 6 5 4 3 2 1

总结:

本文介绍了使用 C 语言实现单链表的就地逆置的方法,并提供了完整的代码示例。希望本文能帮助您更好地理解单链表的数据结构和相关操作。

单链表就地逆置 - C语言实现

原文地址: http://www.cveoy.top/t/topic/nbvR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录