代码代码day1

2018-03-24  本文已影响0人  Emilylxf

Mar.23

题目

Write a program that concatenates two linked list objects of characters. The program should include function concatenate, which takes references to both list objects as arguments and concatenates the second list to the first list.

Sample Run

The list is: a b c d e

The list is: f g h i j

Concatenate the 2 lists means appending second list to first list

start the concatenation.

Create a copy of second list

...remove value from copied list: f

...insert at end of first list: f

...remove value from copied list: g

...insert at end of first list: g

...remove value from copied list: h

...insert at end of first list: h

...remove value from copied list: i

...insert at end of first list: i

...remove value from copied list: j

...insert at end of first list: j

Display the copied list.

The list is empty

end the concatenation.

Start the destructor

The list is empty ...

End the destructor.

The first list after concatenation is:

The list is: a b c d e f g h i j

Start the destructor

Destroying nodes ...

f

g

h

i

j

All nodes destroyed

End the destructor.

Start the destructor

Destroying nodes ...

a

b

c

d

e

f

g

h

i

j

All nodes destroyed

End the destructor.

写代码

/*******************************************************************

* CIS22B Exercise 17.1

* Author : 

* Description: This program concatenates two list objects of characters.

*              linklistc concatenate (linklistc, linklistc)

* Date : Mar.19, 2018

*******************************************************************/

#include<iostream>

#include<string>

using namespace std;

// Specification file for the CharList class

#ifndef CHARLIST_H

#define CHARLIST_H

class CharList{

private:

// Declare a structure for the list

    struct ListNode

    {

char value;  // The value in this node

        struct ListNode *next;  // To point to the next node

    };

    ListNode *head;

public:

// Constructor

    CharList()

{

head =nullptr;

    }

//Destructor

    ~CharList();

    //Linked list operations

    void appendNode(char);

    void concatenate(CharList &);

    void showList();

    bool isEmpty();

};

#endif

void CharList::appendNode(char c) {

ListNode *newNode; // To point to a new node, must be a pointer

    ListNode *nodePtr; // To move through the list

// Allocate a new node and store char there

    newNode =new ListNode;

    newNode ->value = c;

    newNode ->next =nullptr;

    //If there are no nodes in the list

//make newNode the first node.

    if(!head)

head = newNode;

    else // Otherwise, insert new node at end.

    {

// Initialize nodeptr to head of list.

        nodePtr =head;

        //Find the last node in the list.

        while (nodePtr->next)

nodePtr = nodePtr->next;

        // Insert newNode as the last node.

        nodePtr ->next = newNode;

    }

}

void CharList::showList(){

ListNode *nodeptr;

    if(!head)

return;

    else{

nodeptr =head;

        while(nodeptr){

cout<< nodeptr->value << " ";

            nodeptr = nodeptr ->next;

        }

}

}

bool CharList::isEmpty() {

if(!head)

return true;

    else

        return false;

}

void CharList::concatenate(CharList &l2){

ListNode *firstNode2;  // For tranverse L2

    ListNode *lastNode1; // For tranverse list

// ListNode *tempNode; // For get the oringin list l2;

//tempNode = l2.head;

// Find the end of list l1(this list)

    if(head)

{

lastNode1 =head;

        while(lastNode1->next)

{

lastNode1 = lastNode1->next;

        }

}

else

    {

lastNode1 =head;

    }

// Find the first node of l2

    while(l2.head !=nullptr)

{

//Remove the first

        firstNode2 = l2.head;

        //firstNode2->next = nullptr;

        cout<< "...remove value from copied list: " << firstNode2->value <

        lastNode1->next = firstNode2;

        lastNode1 = firstNode2;

        cout<<"...insert at end of first list: " << firstNode2->value << endl;

        l2.head = l2.head->next;

    }

//cout << "\ntemp:" << tempNode->value<

}

// Destructor

// This function deletes every node in the list.

CharList:: ~CharList() {

ListNode * nodePtr; // To traverse the list

    ListNode * nextNode; // To point to the next node

// Position nodePtr at the head of the list.

    nodePtr =head;

    // While nodePtr is not at the end of the list...

    while (nodePtr !=nullptr)

{

//Save a pointer to the next node.

        nextNode = nodePtr->next;

        // Delete the current node.

        delete nodePtr;

        // Position nodePtr at the next node.

        nodePtr = nextNode;

    }

}

int main(){

// Create Char

    CharList l1, l2;

    l1.appendNode('a');

    l1.appendNode('b');

    l1.appendNode('c');

    l1.appendNode('d');

    l1.appendNode('e');

    cout<< "The list is: " ;

    l1.showList();

    l2.appendNode('f');

    l2.appendNode('g');

    l2.appendNode('h');

    l2.appendNode('i');

    l2.appendNode('j');

    cout<< "\nThe list is: ";

    l2.showList();

    cout<< endl;

    l1.concatenate(l2);

    cout<< "\nDisplay the copied list.\n";

    l2.showList();

    if(l2.isEmpty())

{

cout<< "The list is empty." << endl;

        cout<< "\nend the concatenation." <

    }

else

        cout<< "The list is not empty, there must be sonthing wrong." <

    cout<< "Start the destructor"<

    cout<< "Destroying nodes... "<

    l1.~CharList();

}

output

上一篇下一篇

猜你喜欢

热点阅读