c++ - doubly linked list with dummy node -


i have spent time here without progress on implementation of doubly linked list. trying @ least fix insertlast func, , had no luck @ all. part of lack of experience on how deal pointers in c++. advice valuable @ point. when execute 0 size of list.

#include <iostream> using namespace std;  class node { public: int data; node *prev, *next; node(int x,node *p,node *q) {     data = x; prev = p; next = q; } }; public class position :public node {  //};  class list { public: node *head; int size; public: list() {     head = new node(null,null,null);     head->prev = head;     head->next = head;     size = 0;  } int size(){     return list().size; } void insertfirst(int x) {     insertbefore(first(), x);  } void insertlast(int x) {     insertafter(last(), x);  }  void insertafter(node *p, int x) {     node *q = new node(x,p,p->next);     p->next->prev = q;     p->next = q;     size += 1; } void insertbefore(node *p, int x) {     node *q = new node(x,p->prev,p);     p->prev->next = q;     p->prev = q;     size += 1; } void insertatrank(int rank, int x) {     insertbefore(toposition(rank), x); } void remove(node *p) {     p->prev->next = p->next;     p->next->prev = p->prev;     p->prev = p->next = null;     size -= 1; } void removeatrank(int rank) {     remove(toposition(rank)); } int element(node *p) {     return p->data; } int elementatrank(int rank) {     return toposition(rank)->data; } int torank(node *p) {     int r = 0;     (node *q = first(); q != p; q = q->next) r += 1;     return r; } node *toposition(int rank) {     if (rank > size){         throw "exception";     }     node *q = first();     (int r = 0; r != rank; r += 1){         q = q->next;         return q;     } }   node *first() { return head->next; } node *last() { return head->prev; } node *after(node *p) { return p->next; } node *before(node *p) { return p->prev; } bool isempty() { return head->next == head; }  node *removelast(){     if (last() == null){         throw "exception";     }     node *p = last();     p->prev->next = p->next;     p->next->prev = p->prev;     p->prev = p->next = null;     return p; }  };   void main(){ int x; list l; int a[]{163, 179, 103, 91, 404,     531, 745, 405, 686,     858, 898, 926, 266, 867, 865,     91, 103, 163, 179, 2,     66, 404, 405, 531, 686, 745,     858, 865, 867, 898, 926}; int size = sizeof(a) / sizeof(a[0]); (int = 0; < size; i++){     l.insertlast(i);  }  (int j = 0; j < l.size(); j++){     cout << l.elementatrank(j) << endl; } cout << l.size(); cin >> x; }   

i trying @ least fix insertlast func

your inserlast() looks fine. try following code:

#include <iostream> using namespace std;  class node { public: int data; node *prev, *next; node(int x,node *p,node *q) {     data = x; prev = p; next = q; } };  class list { public: node *head; int size; public: list() {     head = new node(0,null,null);     head->prev = head;     head->next = head;     size = 0;  } int size(){     return size; } void insertfirst(int x) {     insertbefore(first(), x);  } void insertlast(int x) {     insertafter(last(), x);  }  void insertafter(node *p, int x) {     node *q = new node(x,p,p->next);     p->next->prev = q;     p->next = q;     size += 1; } void insertbefore(node *p, int x) {     node *q = new node(x,p->prev,p);     p->prev->next = q;     p->prev = q;     size += 1; } void insertatrank(int rank, int x) {     insertbefore(toposition(rank), x); } void remove(node *p) {     p->prev->next = p->next;     p->next->prev = p->prev;     p->prev = p->next = null;     size -= 1; } void removeatrank(int rank) {     remove(toposition(rank)); } int element(node *p) {     return p->data; } int elementatrank(int rank) {     return toposition(rank)->data; } int torank(node *p) {     int r = 0;     (node *q = first(); q != p; q = q->next) r += 1;     return r; } node *toposition(int rank) {     if (rank > size){         throw "exception";     }     node *q = first();     (int r = 0; r != rank; r += 1){         q = q->next;      }     return q; }   node *first() { return head->next; } node *last() { return head->prev; } node *after(node *p) { return p->next; } node *before(node *p) { return p->prev; } bool isempty() { return head->next == head; }  node *removelast(){     if (last() == null){         throw "exception";     }     node *p = last();     p->prev->next = p->next;     p->next->prev = p->prev;     p->prev = p->next = null;     return p; }  };   void main(){ int x; list l; int a[]{163, 179, 103, 91, 404,     531, 745, 405, 686,     858, 898, 926, 266, 867, 865,     91, 103, 163, 179, 2,     66, 404, 405, 531, 686, 745,     858, 865, 867, 898, 926}; int size = sizeof(a) / sizeof(a[0]); (int = 0; < size; i++){     l.insertlast(i); }  (int j = 0; j < l.size(); j++){     cout << l.elementatrank(j) << endl; } cout << l.size(); cin >> x; } 

changes made:

  • removed vague class position : public node
  • int size() { return size; }
  • node* toposition (int rank) {...} - moved return statement in end

n.b.: did not check other parts of code. made code compile correctly , work expected, because "you trying @ least fix insertlast func"


Comments

Popular posts from this blog

android - Pass an Serializable object in AIDL -

How to provide Authorization & Authentication using Asp.net, C#? -

How to use Authorization & Authentication in Asp.net, C#? -