• #include <iostream>
  • #include<fstream>
  •  
  • using namespace std;
  •  
  • struct Node
  • {
  •         int data ;
  •         Node *next ;
  • };
  • typedef struct Node Node ;
  •  
  • void ReverseList(Node*& head)
  • {
  •     if(head == NULL || head->next == NULL)
  •         return;
  •  
  •     Node* currentNode = head;
  •     Node* previousNode = NULL;
  •  
  •     while(currentNode != NULL)
  •         ...{
  •             Node* temp = currentNode->next;
  •             currentNode->next = previousNode;
  •             previousNode = currentNode;
  •             currentNode = temp;
  •     }
  •  
  •     head = previousNode;
  • }
  •  
  • // My answer.
  • Node* MergeLinkList(Node* listA, Node* listB)
  • {
  •     if(listA == NULL)
  •         return listB;
  •     if(listB == NULL)
  •         return listA;
  •  
  •     Node* pHeadSmall = listA -> data < listB -> data ? listA : listB;
  •     Node* pHeadBig = pHeadSmall == listA ? listB : listA;
  •  
  •     Node* p = pHeadSmall;
  •     Node* q = pHeadSmall->next;
  •     Node* r = pHeadBig;
  •  
  •     while(q != NULL && r != NULL)
  •         ...{
  •             if(q->data <= r->data)
  •                 ...{
  •                     p->next = q;
  •                     p = p->next;
  •                     q = q->next;
  •             }
  •             else
  •                 ...{
  •                     p->next = r;
  •                     p = p->next;
  •                     r = r->next;
  •             }
  •     }
  •     if(q == NULL)
  •     {
  •             p->next = r;
  •     }
  •     else
  •     {
  •             p->next = q;
  •     }
  •     return pHeadSmall;
  • }
  •  
  • // Standard answer
  • Node * Merge(Node *head1 , Node *head2)
  • {
  •     if ( head1 == NULL)
  •         return head2 ;
  •     if ( head2 == NULL)
  •         return head1 ;
  •     Node *head = NULL ;
  •     Node *p1 = NULL;
  •     Node *p2 = NULL;
  •     if ( head1->data < head2->data )
  •     {
  •             head = head1 ;
  •             p1 = head1->next;
  •             p2 = head2 ;
  •     }
  •     else
  •     {
  •             head = head2 ;
  •             p2 = head2->next ;
  •             p1 = head1 ;
  •     }
  •     Node *pcurrent = head ;
  •     while ( p1 != NULL && p2 != NULL)
  •     {
  •             if ( p1->data <= p2->data )
  •             {
  •                     pcurrent->next = p1 ;
  •                     pcurrent = p1 ;
  •                     p1 = p1->next ;
  •             }
  •             else
  •             {
  •                     pcurrent->next = p2 ;
  •                     pcurrent = p2 ;
  •                     p2 = p2->next ;
  •             }
  •     }
  •     if ( p1 != NULL )
  •         pcurrent->next = p1 ;
  •     if ( p2 != NULL )
  •         pcurrent->next = p2 ;
  •     return head ;
  • }
  •  
  • // Utillity function.
  • void TestList(Node* head)
  • {
  •     Node* p = head;
  •     while(p != NULL)
  •     {
  •             cout << p->data << endl;;
  •             p= p->next;
  •     }
  • }
  •  
  • // Utillity function.
  • Node* InputList(ifstream& inFile)
  • {
  •     int len;
  •     inFile >> len;
  •     Node* head = new Node[len];
  •     Node* p = head;
  •     for(int i = 0; i < len - 1; i++)...{
  •         inFile >> p->data;
  •         p->next = p + 1;
  •         p = p->next;
  •     }
  •     inFile >> p->data;
  •     p->next = NULL;
  •  
  •     return head;
  • }
  •  
  • int main()
  • {
  •     ifstream inFile("d:\data.txt");
  •     if(!inFile)
  •         return -1;
  •  
  •     Node* headA = InputList(inFile);
  •     Node* headB = InputList(inFile);
  •  
  •     TestList(headA);
  •     TestList(headB);
  •  
  •     ReverseList(headA);
  •     cout<< "Testing Reverse A" << endl;
  •     TestList(headA);
  •  
  •     ReverseList(headA);
  •     cout<< "Testing Reverse A back." << endl;
  •     TestList(headA);
  •  
  •     Node* newHead = Merge(headA, headB);
  •     cout<< "Testing Merged List." << endl;
  •     TestList(newHead);
  •  
  •     while(newHead != NULL)
  •     {
  •         Node* ptr = newHead;
  •         newHead = newHead->next;
  •         delete ptr;
  •     }
  • }
  • 相关文章:

    • 2022-12-23
    • 2021-09-01
    • 2018-05-30
    • 2022-01-03
    • 2022-01-05
    • 2021-11-19
    • 2022-02-28
    猜你喜欢
    • 2021-11-19
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2021-11-18
    • 2021-10-02
    • 2022-01-22
    相关资源
    相似解决方案