单链表就地逆置 - C语言实现
单链表就地逆置 - 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;}
代码说明:
createList()函数用于创建单链表,从标准输入读取数据,以 -1 结束输入。2.reverseList()函数实现单链表的就地逆置。使用三个指针pre、cur和next,分别指向当前结点的前一个结点、当前结点和下一个结点。通过改变指针指向,将链表的连接方式反转。3.printList()函数用于打印单链表。
运行结果:
输入:1 2 3 4 5 6 7 8 9 10 -1
输出:10 9 8 7 6 5 4 3 2 1
总结:
本文介绍了使用 C 语言实现单链表的就地逆置的方法,并提供了完整的代码示例。希望本文能帮助您更好地理解单链表的数据结构和相关操作。
原文地址: http://www.cveoy.top/t/topic/nbvR 著作权归作者所有。请勿转载和采集!