频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
单向列表倒置
2012-11-21 08:42:55           
收藏   我要投稿

单向列表倒置:

算法示例:

head  end   tmp
 1---->2---->3---->4---->5

end   head     tmp
 2---->1        3---->4---->5

head       end   tmp
 2---->1    3---->4---->5

end  head        tmp
 3---->2---->1    4---->5

head             end   tmp
 3---->2---->1    4---->5

end  head              tmp
 4---->3---->2---->1    5

head                   end   tmp
 4---->3---->2---->1    5    NULL

end  head
 5---->4---->3---->2---->1

示例代码:

[cpp]
#include <stdio.h> 
#include <stdlib.h> 
 
typedef struct LIST_NODE { 
    struct LIST_NODE* next; 
    int value; 
}LIST_NODE; 
 
LIST_NODE* list_inversion(LIST_NODE *head) { 
 
    printf("in list_inversion\n"); 
    LIST_NODE *tmp, *end; 
    end = head->next; 
    tmp = end->next; 
    head->next = NULL; 
    while (NULL != tmp) { 
        end->next = head; 
        head = end; 
        end = tmp; 
        tmp = tmp->next; 
    } 
    end->next = head; 
    return end; 

 
int main() { 
    LIST_NODE *head, *end; 
    head = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1); 
    end = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1); 
    LIST_NODE* tmp = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1); 
    int len = 0, value = 0; 
    printf("Input length of list :\n"); 
    scanf("%d", &len); 
    tmp = head; 
    for(int i= 0; i < len; i++) { 
        LIST_NODE* tmp2 = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1); 
        printf("Input the current value : "); 
        tmp->next = tmp2; 
        if (i == len-1) { 
            tmp->next = NULL; 
        } 
        scanf("%d", &value); 
        tmp->value = value; 
        tmp = tmp->next; 
    } 
 
    LIST_NODE *aList = list_inversion(head); 
    printf("new list : \n"); 
    while (NULL != aList) { 
        printf("%d\n", aList->value); 
        aList= aList->next; 
    } 

示例运行结果:
[root@localhost List]# ./listtest
Input length of list :
5
Input the current value : 1
Input the current value : 2
Input the current value : 3
Input the current value : 4
Input the current value : 5
in list_inversion
new list :
5
4
3
2
1
 

点击复制链接 与好友分享!回本站首页
相关TAG标签 单向
上一篇:算法——求数组中最大子数组和
下一篇:TYVJ P2065(区间嵌套与统计)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站