#include <iostream>
using namespace std;

typedef 
struct LinkList
{
    
int Data;
    
struct LinkList *pNext;
}Node, 
*pLinkList;

Node
* NodeCreat()
{
    
int nums;    
    cout
<<"Please input the counts of the LinkList: ";
    cin
>>nums;
    
if(nums < 1)
    {
        
return NULL;
    }

    Node 
*head = new Node;
    Node 
*curr = NULL;
    
int mdate;
   
    cout
<<"Please input the data of this node: ";
    cin
>>mdate;
    head
->Data = mdate;
    curr 
= head;

    
while(nums - 1)
    {
        Node 
*newNode = new Node;
        cout
<<"Please input the data of this node: ";
        cin
>>mdate;
        newNode
->Data = mdate;
        curr
->pNext = newNode;
        curr 
= curr->pNext;
        nums
--;
    }
    curr
->pNext = NULL;
    
return head;
}

int GetListLenth(Node *head)
{
    
int num = 0;
    Node 
*= head;

    
while(p)
    {
        num
++;
        p 
= p->pNext;
    }
    
return num;
}

void TraverseList(Node* head)
{
    
int counts = 0;
    Node
* p = head;
    
while(p)
    {
        counts
++;
        cout
<<counts<<" = "<<p->Data<<endl;
        p 
= p->pNext;
    }
}

Node
* InsertNode(Node* head, int index)
{
    Node 
*= head;
    Node 
*temp = new Node;
    cout
<<"Input the wanted data:";
    cin
>>temp->Data;
    cout
<<endl;

    
if(index <= 1)
    {
        temp
->pNext = head;
        temp 
=head;
        index 
= 0;
        
return head;
    }

    
while(index - 1)
    {
        p 
= p->pNext;
        index
--;
    }

    temp
->pNext = p->pNext;
    p
->pNext = temp;
    
return head;
}

Node
* DeleteNode(Node *head, int index)
{
    cout
<<"delete the index "<<index<<endl;
    Node 
*= head;
    Node 
*temp = NULL;
    
if(index <= 1)
    {
        p 
= p->pNext;
        index 
= 0;
        head 
= p;
        delete p;
        p 
= NULL;
        
return head;
    }

    
while(index - 1)
    {
        p 
= p->pNext;
        index
--;
    }
    temp 
= p->pNext;
    p
->pNext = temp->pNext;
    delete temp;
    temp 
= NULL;
    
return head;
}

Node 
*ReverseList(Node *head)
{
    Node 
*p1 = head;
    Node 
*p2 = p1->pNext;
    Node 
*p3;

    
if(!head && !(head->pNext))
        
return head;
    
    
while(p2)
    {
        p3 
= p2->pNext;
        p2
->pNext = p1;
        p1 
= p2;
        p2 
= p3;
    }

    head 
->pNext = NULL;
    head 
= p1;
    
return head;
}

void MergeLists(Node *LA, Node* LB, pLinkList &LC)
{
    
if(!LA)
        LC 
= LB;
    
if(!LB)
        LC 
= LA;

    
if(LA->Data < LB->Data)
    {
        LC 
= LA;
        LA 
= LA->pNext;
    }
    
else
    {
        LC 
= LB;
        LB 
= LB->pNext;
    }

    Node 
*temp = NULL;
    temp 
= LC;
    
    
while (LA && LB)
    {
        
if(LA->Data < LB->Data)
        {
            temp
->pNext = LA;
            LA 
= LA->pNext;
        }
        
else
        {
            temp
->pNext = LB;
            LB 
= LB->pNext;
        }
        temp 
= temp->pNext; 
    }

    
if(!LA)
        temp
->pNext = LB;
    
if(!LB)
        temp
->pNext = LA;
}

Node
* ListSort(Node* head)
{
    
int lenth;
    
int temp;
    Node 
*p;
    p 
= head;
    
if(!head || !head->pNext) 
        
return head;

    lenth 
= GetListLenth(head);
    
for(int i = 0; i < lenth - 1; i++)
    {
        p 
= head;
        
for (int j = 0; j < lenth - i -1; j++)
        {
            
if(p->Data > p->pNext->Data)
            {
                temp 
= p->Data;
                p
->Data = p->pNext->Data;
                p
->pNext->Data = temp;
            }
            p 
= p->pNext;
        }
    }
    
return head;
}

void main()
{
    
int index;
    Node
* head = NodeCreat();
    TraverseList(head);
    head 
= ListSort(head);
    TraverseList(head);

    Node
* head2 = NodeCreat();
    TraverseList(head2);
    head2 
= ListSort(head2);
    TraverseList(head2);

    Node
* head3;
    MergeLists(head, head2, head3);
    TraverseList(head3);

    head 
= InsertNode(head, 3);
    TraverseList(head);
    head 
= DeleteNode(head, 3);
    TraverseList(head);
    head 
= ReverseList(head);
    TraverseList(head);
    cin
>>index;
    cout
<<endl;
}
posted on 2009-06-05 14:10  Jackill  阅读(187)  评论(0编辑  收藏  举报