Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "linkedlist.h"
- #include <iostream>
- using namespace std;
- template <typename T>
- linkedlist<T>::linkedlist()
- : root(NULL)
- {
- }
- template <typename T>
- linkedlist<T>::~linkedlist()
- {
- node<T>* temp = root;
- while(temp){
- node<T>* todelete = temp;
- temp = temp->next;
- delete todelete;
- }
- root = NULL;
- }
- /*
- template <typename T>
- void linkedlist<T>::print()
- {
- cout << "no console output for this datatype" << endl;
- }
- template <>
- void linkedlist<int>::print()
- {
- node<int>* temp = root;
- while(temp){
- cout << temp->getdata() << " -> ";
- temp = temp->next;
- }
- cout << endl;
- }
- */
- template <typename T>
- void linkedlist<T>::print(node<T>* inputnode)
- {
- node<T>* temp = inputnode;
- while(temp){
- cout << temp->getdata() << " -> ";
- temp = temp->next;
- }
- cout << endl;
- }
- template <typename T>
- void linkedlist<T>::insert(const T& data)
- {
- cout << data << endl;
- if(!root)
- {
- root = new node<T>(data);
- print(root);
- return;
- }
- node<T>* temp = root;
- print(root);
- while(temp && temp->next != NULL)
- {
- temp = temp->next;
- }
- temp->next = new node<T>(data);
- print(root);
- }
- template <typename T>
- node<T>* incrementby(node<T>* inputnode,int n)
- {
- node<T>* temp = inputnode;
- while(temp && --n > -1)
- {
- temp = temp->next;
- }
- return temp;
- }
- /*
- 1 2 3 4 5 6 7
- 1 3
- 2 4
- */
- template <typename T>
- void linkedlist<T>::reverse_even_nodes()
- {
- print(root);
- node<T>* temp = root;
- node<T>* secondhead = NULL;
- while(temp)
- {
- node<T>* tempnext = temp->next;
- if(tempnext)
- {
- temp->next = tempnext->next;
- }
- temp = tempnext;
- if(!secondhead)
- {
- secondhead = tempnext;
- }
- }
- print(root);
- print(secondhead);
- node<T>* reversed_even_node_head = reverse(secondhead);
- temp = root;
- print(reversed_even_node_head);
- while(temp && reversed_even_node_head)
- {
- node<T>* reversed_temp_node = reversed_even_node_head;
- reversed_even_node_head = reversed_even_node_head->next;
- node<T>* tempnext = temp->next;
- reversed_temp_node->next = tempnext;
- temp->next = reversed_temp_node;
- temp = tempnext;
- }
- print(root);
- }
- template <typename T>
- node<T>* linkedlist<T>::reverse(node<T>* inputnode)
- {
- node<T>* firstnode = inputnode;
- node<T>* secondnode = NULL;
- node<T>* currenthead = inputnode;
- while(firstnode)
- {
- secondnode = firstnode->next;
- if(secondnode)
- {
- firstnode->next = secondnode->next;
- secondnode->next = currenthead;
- currenthead = secondnode;
- }
- else
- {
- break;
- }
- secondnode = NULL;
- }
- return currenthead;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement