题目1518:反转链表

来源:互联网 发布:淘宝版网页版登录 编辑:程序博客网 时间:2024/05/17 12:54
题目描述:

输入一个链表,反转链表后,输出链表的所有元素。
(hint : 请务必使用链表)

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数。
输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素。

输出:

对应每个测试案例,
以此输出链表反转后的元素,如没有元素则输出NULL。

代码:

#include<stdio.h>#include<stdlib.h>typedef struct Link{int data;struct Link *next;}Node;//头插法翻转不带头结点的链表 Node *reverse(Node *head){Node *p,*q;if(head->next != NULL){p = head->next;head->next = NULL;}while(p != NULL){q = p->next;p->next = head;head = p;p = q;}return head;}//打印不带头结点的链表 void print(Node *head){Node *p = head;while(p != NULL){if(p == head)printf("%d",p->data);else printf(" %d",p->data);p = p->next;}printf("\n");}int main(){int n;while(scanf("%d",&n) != EOF){if(n == 0)printf("NULL\n");else{//构建不带头结点的链表 Node *head,*p,*s;head = (Node *)malloc(sizeof(Node));scanf("%d",&head->data);head->next = NULL;p = head;for(int i = 1; i < n; i++){s = (Node *)malloc(sizeof(Node));scanf("%d",&s->data);p->next = s;p = s;}p->next = NULL;//翻转链表 print(reverse(head));}}}


 

0 0