链表逆序

要求实现函数:

void converse(ListNode **head);

 【输入】head:    链表头节点,空间已经开辟好

 【输出】head:    逆序后的链表头节点

 【返回】无

 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

 示例

输入:链表  1->2->3->4->5 的头节点head

 输出:链表  5->4->3->2->1 的头节点head

 

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<algorithm>
 5 #include<stack>
 6 #include<map>
 7 #include<sstream>
 8 using namespace std;
 9 
10 typedef struct tagListNode
11 {
12     int value;
13     struct tagListNode *next;
14 }ListNode;
15 
16 void converse(ListNode **head)
17 {
18     ListNode* h1 = *head;
19     if(h1==NULL)
20         return;
21 
22     ListNode *p, *q;
23     p = h1;
24     q = p->next;
25 
26     while(q!=NULL)
27     {
28         ListNode *temp = q;
29         q = q->next;
30         temp->next = p;
31         p = temp;
32     }
33     h1->next = NULL;
34     h1 = p;
35 
36     //head = &h1;  //这样写不能把逆序后的头指针传回去
37     *head = h1;
38 }
39 
40 int main()
41 {
42     int val;
43     ListNode *h = NULL;
44     ListNode *last=NULL, *p=NULL;
45     
46     while(cin>>val)
47     {
48         if(h==NULL)
49         {
50             h = new ListNode;
51             h->value = val;
52             last = h;
53         }
54         else
55         {
56             p = new ListNode;    
57             p->value = val;    
58             last->next = p;
59             last = p;
60         }
61     }
62     if(last!=NULL)
63         last->next = NULL;
64 
65     converse(&h);
66 
67     ListNode *cur = h;
68     while(cur!=NULL)
69     {
70         cout<<cur->value<<" ";
71         cur = cur->next;
72     }
73     
74     return 0;
75 }

 

运行结果:

posted @ 2014-07-03 11:17  Marrybe  阅读(272)  评论(0编辑  收藏  举报