当前位置:编程学习 > C/C++ >>

单向列表倒置

单向列表倒置:

算法示例:

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
 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,