Please can some one help me here;
I have 4 questions to solve
/a. Write a member function to check whether two singly Linked List have
the same contents.
//b.Write a member function to reverse a singly Linked List using only
one pass through the list.
//c.Insert a new node into a singly linked List(i) Before and (ii) After a node
pointed by p in this list ( possibly the first or the last). Do not use a
loop in either operations.
//d. Attach a singly linked list to the end of another singly linked list.
I have done some coding shown below:
//
//************************ intSLLst.cpp **************************
#include <iostream>
#include <stdlib.h>
#include "IntSLList.h"
IntSLList::~IntSLList() {
for (IntSLLNode *p; !isEmpty(); ) {
p = head->next;
delete head;
head = p;
}
}
void IntSLList::addToHead(int el) {
head = new IntSLLNode(el,head);
if (tail == 0)
tail = head;
}
void IntSLList::addToTail(int el) {
if (tail != 0) { // if list not empty;
tail->next = new IntSLLNode(el);
tail = tail->next;
}
else head = tail = new IntSLLNode(el);
}
int IntSLList::deleteFromHead() {
int el = head->info;
IntSLLNode *tmp = head;
if (head == tail) // if only one node on the list;
head = tail = 0;
else head = head->next;
delete tmp;
return el;
}
int IntSLList::deleteFromTail() {
int el = tail->info;
if (head == tail) { // if only one node on the list;
delete head;
head = tail = 0;
}
else { // if more than one node in the list,
IntSLLNode *tmp; // find the predecessor of tail;
for (tmp = head; tmp->next != tail; tmp = tmp->next);
delete tail;
tail = tmp; // the predecessor of tail becomes tail;
tail->next = 0;
}
return el;
}
void IntSLList::deleteNode(int el) {
if (head != 0) // if non-empty list;
if (head == tail && el == head->info) { // if only one
delete head; // node on the list;
head = tail = 0;
}
else if (el == head->info) { // if more than one node on the list
IntSLLNode *tmp = head;
head = head->next;
delete tmp; // and old head is deleted;
}
else { // if more than one node in the list
IntSLLNode *pred, *tmp;
for (pred = head, tmp = head->next; // and a non-head node
tmp != 0 && !(tmp->info == el);// is deleted;
pred = pred->next, tmp = tmp->next);
if (tmp != 0) {
pred->next = tmp->next;
if (tmp == tail)
tail = pred;
delete tmp;
}
}
}
bool IntSLList::isInList(int el) const {
IntSLLNode *tmp;
for (tmp = head; tmp != 0 && !(tmp->info == el); tmp = tmp->next);
return tmp != 0;
}
// a. Write a member function to check whether two singly linked lists have the same contents
bool IntSLList::operator==(const IntSLList& list2) const {
IntSLLNode *lst1 = head, *lst2 = list2.head;
for ( ; lst1 != 0 && lst2 != 0 && lst1->info == lst2->info;
lst1 = lst1->next, lst2 = lst2->next);
return lst1 == lst2; // true if both are null;
}
//b.Write a member function to reverse a singly Linked List using only one pass through the list.
void IntSLList::reverseList(){
if (head!=0 && head ->next!=0) {
IntSLLNode *p1 = head;
IntSLLNode *p= head->next;
p1->next=0;
IntSLLNode *p2 = p->next;
}
while(p2!=0);
{
p2->next=p;
p->next=p1;
}
}
void ostream& operator<< (ostream& out, const IntSLList& list) {
for (IntSLLNode *p = list.head; p != 0; p = p->next);
out << p->info << ' ';
out << endl;
return out;
}
// Can some please HELP...