0x55AA 发表于 2015-1-11 12:57:32

【算法】链表翻转

#include <iostream>
using namespace std;

struct Node
{
        int key;
        Node* next;
};
Node* createList(int arr[],int nLength);
Node* reverseList(Node* head);
void printList(Node* head);
void clearList(Node* head);

void main()
{
        int arr[] = {1,3,5,7,9};
        int nLength = sizeof(arr)/sizeof(arr);
        Node* head = createList(arr,nLength);
        printList(head);
        head = reverseList(head);
        printList(head);
        clearList(head);
}

Node* createList(int arr[],int nLength)
{
        Node* head = new Node;
        head->key = arr;
        head->next = NULL;
        Node *p = head;
        for(int i=1;i<nLength;i++)
        {
                Node* ptr = new Node;
                ptr->key = arr;
                ptr->next = NULL;
                p->next = ptr;
                p = p->next;
        }
        return head;
}

Node* reverseList(Node* head)
{
        Node* preNode = NULL;
        Node* pNode = head;
        while( pNode != NULL )
        {
                Node* pNext = pNode->next;
                pNode->next = preNode;
                preNode = pNode;
                pNode = pNext;

        }
        return preNode;
}

void printList(Node* head)
{
        Node* p = head;
        while( p!= NULL )
        {
                cout<<p->key<<endl;
                p=p->next;
        }
}

void clearList(Node* head)
{
        Node* p = head;
        Node* ptr;
        while( p!= NULL )
        {
                ptr = p->next;
                delete p;
                p = ptr;
        }
}
页: [1]
查看完整版本: 【算法】链表翻转