已知head指向一个带头节点的单向链表,链表中每个结点包含数据域和指针域。用链表实现该链表的逆置,并输出。只要求实现该函数功能即可。函数声明为void Convert(struct Node *head)。
结点的结构体为:
struct Node
{
char data;
struct Node *next;
}
例如:
输入:abcde,得到如下链表
调用Convert()函数后,得到如下链表
输出:edcba
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define N 5
4 #define NEW (NODE *)malloc(sizeof(NODE))
5 typedef struct Node
6 {
7 char data;
8 struct Node *next;
9 }NODE;
10 NODE *Createlist();
11 void Convert(struct Node *head);
12 void Printlist(NODE *head);
13 int main()
14 {
15 NODE *head;
16 head = Createlist();
17 Convert(head);
18 Printlist(head);
19 return 0;
20 }
21
22 NODE *Createlist()
23 {
24 int i;
25 NODE *head,*p,*q;
26 head = NEW;
27 p = head;
28 for(i = 0;i < N;i++)
29 {
30 q = NEW;
31 p->next = q;
32 scanf("%c",&q->data);
33 p = q;
34 }
35 q->next = NULL;
36 return head;
37 }
38 void Printlist(NODE *head)
39 {
40 NODE *p = head->next;
41 while(p != NULL)
42 {
43 printf("%c",p->data);
44 p = p->next;
45 }
46 }
47 void Convert(NODE *head)
48 {
49 NODE *p,*q,*temp;
50 p = head;
51 q = p->next;
52 while(q->next != NULL)
53 {
54 temp = q->next;
55 q->next = p;
56 p = q;
57 q = temp;
58 }
59 q->next = p;
60 head->next->next = NULL;
61 head->next = q;
62 }