翻转一个单列表

原创
2014/09/18 16:55
阅读数 26

#include<stdio.h>

#include<stdlib.h>


/**

翻转一个单链表

*/

typedef struct Node{


        int value; 

        struct Node * next;

}Node;



Node * reverse(Node *head){


        if(head == NULL || head -> next == NULL ){ return  head;}


        Node *f1 = NULL, *f2 = NULL, *cur = NULL;


        cur = head;

        f1 = cur->next;

        f2 = cur->next->next;

        if(f2 == NULL){

                f1->next = cur;

                cur->next = NULL;

                return f1;

        }


        while(f2 != NULL){


                f1->next = cur;

                cur = f1;

                f1 = f2;

                f2 = f2->next;


        }


        head->next=NULL;

        f1->next = cur;

        return f1;




}


void printNodes(Node * node){

        int i = 0;

        printf("\n---------------------------\n");


        while(node != NULL && i < 10){

                printf("%d\n",node->value);

                i++;

                node = node->next;

        }


}

int main(){


        Node *n1 = malloc(sizeof(struct Node ));

        Node *n2 = malloc(sizeof(struct Node ));

        Node *n3 = malloc(sizeof(struct Node ));

        Node *result;

        int i =0;

        n1->value =1;

        n2->value =2;

        n3->value =3;

        n1->next = n2;

        n2->next = n3;

        n3->next = NULL;

        printNodes(n1);

        result  = reverse(n1); 

        printNodes(result);




}


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部