单链表反转以及反向打印

单链表反转以及反向打印
 1 #include  " stdio.h "
 2 #include  " stdlib.h "
 3
 4 typedef
 5 struct  Node
 6 {
 7int data;
 8Node* next;
 9}
Node;
10
11
12 Node *  reverse_list(Node *  header)
13 {
14    Node *p, *q, *r;
15    p = q = r = 0;
16
17    q = header;
18    if(q)
19    {
20        r = q->next;
21    }

22
23    while (q)
24    {
25        q->next = p;
26        p = q;
27        q = r;
28        r = r?r->next:0;
29    }

30    return p;
31}

32
33 void  reverse_print(Node *  header)
34 {
35    if (header)
36    {
37        reverse_print(header->next);
38        printf("%d\n",header->data);
39    }

40}

41
42 int  main()
43 {
44    Node n1, n2,n3;
45    n1.data = 1;
46    n1.next = &n2;
47
48    n2.data = 2;
49    n2.next = &n3;
50
51    n3.data = 3;
52    n3.next = 0;
53
54    reverse_print(&n1);
55    printf("================\n");
56    reverse_print(reverse_list(&n1));
57    return 0;
58}

你可能感兴趣的:(单链表反转以及反向打印)