void LL::DeleteLongest () { if (!head) return; int longest = head->longestlength(); head = head->DelAllOfLength (longest); } int LLN::longestlength() { if (!next) return data.length(); int lsf = next->longestlength(); if (data.length() >= lsf) return data.length(); return lsf; } LLN * LLN::DelAllOfLength (int n) { if (next) next = next->DelAllOfLength (n); if (data.length()==n) { LLN *t = next; next = nullptr; delete this; return t; } return this; } ALTERNATIVELY: void LL::DeleteLongest () { if (!head) return; int longest = head->longestlength(); head->DelAllOfLength (n); if (head->getdata().length()==longest) { LLN *t = head; head = t->getnext(); t->setnext (nullptr); delete t; } } int LLN::longestlength() { if (!next) return data.length(); int lsf = next->longestlength(); if (data.length() >= lsf) return data.length(); return lsf; } void LLN::DelAllOfLength (int n) { if (!next) return; next->DelAllOfLength (n); if (next->getdata().length()==n) { LLN *t = next; next = t->getnext(); t->setnext (nullptr); delete t; } } Try this one: void LL::MakeCircular (); This attaches the tail node of the list to the head. The tail WAS pointing to null. It should now point to the head. If the list were A-->B-->C it is now A-->B-->C-->A-->B-->C-->A-->B-->C-->... forever ... void LL::MakeCircular () { if (head) head->AttachToTail (head); } void LLN::AttachToTail (LLN *h) { if (next) next->AttachToTail (h); else next = h; }