《数据结构教程》(李春葆 主编)课后习题【2.4】

【2.4】

设计一个算法,将一个带头节点的数据域依次为a1,a2,……,an(n>=3)的单链表的所有节点逆置,即第一个节点的数据域变为an,……,最后一个节点的数据域变为a1。


 

  思路:我是直接在原链表上操作,当然也可以创建一个数组存储链表的数据,然后再倒序放回原链表。

  答案

 

 1 void invert(LinkList *&head)    //逆置链表处理 
 2 {
 3     LinkList* p = head->next;
 4     LinkList* pri = NULL;    //之前的节点 
 5     while(p){
 6         LinkList* q = new LinkList;
 7         q->data = p->data;    //把当前节点记录下来 
 8         q->next = pri;
 9         pri = q;
10         head->next = q;
11         LinkList* t = p;    //当前节点没用了删除掉 
12         p=p->next;
13         delete(t);
14     }
15 }

 

  测试代码

 1 //链表逆置
 2 //思路是遍历原链表,不断将当前节点以头插法插到head头节点后面,以此实现逆置 
 3 
 4 #include <iostream>
 5 using namespace std;
 6 #define Max 10 
 7 struct LinkList{
 8     int data;
 9     LinkList* next;
10 };
11 void CreateLinkList(int a[],int n,LinkList* &head)        //创建一个链表,把a数组中的数据依次放进去 
12 {
13     LinkList *p = head;
14     for(int i=0;i<n;i++){
15         LinkList *q = new LinkList;
16         q->data = a[i];
17         q->next = NULL;
18         p->next = q;
19         p = q;
20     }
21 }
22 void Display(LinkList *&head)    //输出链表 
23 {
24     LinkList *p = head->next;
25     while(p!=NULL){
26         cout<<p->data<<' ';
27         p=p->next;
28     }
29     cout<<endl;
30 }
31 void invert(LinkList *&head)    //逆置链表处理 
32 {
33     LinkList* p = head->next;
34     LinkList* pri = NULL;    //之前的节点 
35     while(p){
36         LinkList* q = new LinkList;
37         q->data = p->data;    //把当前节点记录下来 
38         q->next = pri;
39         pri = q;
40         head->next = q;
41         LinkList* t = p;    //当前节点没用了删除掉 
42         p=p->next;
43         delete(t);
44     }
45 }
46 int main()
47 {
48     int a[Max],n=Max;
49     for(int i=0;i<Max;i++)
50         a[i] = i+1;
51     LinkList *head = new LinkList;
52     CreateLinkList(a,n,head);    //将数组a中的元素顺序创建成一个链表 
53     Display(head);    //输出该链表 
54     invert(head);    //将该链表逆置处理 
55     Display(head);    //输出处理后的链表 
56     return 0;
57 }

 

Freecode : www.cnblogs.com/yym2013

posted @ 2014-03-18 19:43  Freecode#  阅读(901)  评论(0编辑  收藏  举报