Skip to content

Commit 52b5304

Browse files
committed
Design Linked List
1 parent 5db5919 commit 52b5304

File tree

2 files changed

+151
-7
lines changed

2 files changed

+151
-7
lines changed
Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,41 @@
11
#include<iostream>
2-
#include<vector>
3-
#include<algorithm>
42
using namespace std;
5-
// Linked List Cycle
6-
bool hasCycle(ListNode *head){
3+
struct ListNode{
4+
int data;
5+
ListNode * next;
6+
ListNode(int val){
7+
data = val;
8+
next = NULL;
9+
}
10+
};
11+
bool hascycle(ListNode * head){
712
if(head == NULL){
813
return false;
914
}
10-
ListNode *fast = head;
11-
ListNode *slow = head;
12-
while(fast->next!=NULL && fast->next->next!=NULL){
15+
ListNode * slow = head;
16+
ListNode * fast = head;
17+
while(fast->next != NULL && fast->next->next != NULL){
1318
fast = fast->next->next;
1419
slow = slow->next;
1520
if(fast == slow){
1621
return true;
1722
}
1823
}
1924
return false;
25+
}
26+
int main(){
27+
ListNode * head = new ListNode(1);
28+
head->next = new ListNode(2);
29+
head->next->next = new ListNode(3);
30+
head->next->next->next = new ListNode(4);
31+
head->next->next->next->next = new ListNode(5);
32+
head->next->next->next->next->next = head->next;
33+
bool isCycle = hascycle(head);
34+
if(isCycle){
35+
cout << "The Linked List Contains Cycle. " << endl;
36+
}
37+
else{
38+
cout << "The Linked List Does not contain a Cycle. " << endl;
39+
}
40+
return 0;
2041
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#include <iostream>
2+
using namespace std;
3+
class Node {
4+
public:
5+
int val;
6+
Node* prev;
7+
Node* next;
8+
Node(int val) {
9+
this->val = val;
10+
prev = NULL;
11+
next = NULL;
12+
}
13+
};
14+
class MyLinkedList {
15+
public:
16+
Node* head;
17+
Node* tail;
18+
MyLinkedList() {
19+
head = NULL;
20+
tail = NULL;
21+
}
22+
int get(int index) {
23+
Node* temp = head;
24+
int i = 0;
25+
while (temp != NULL) {
26+
if (i == index) return temp->val;
27+
temp = temp->next;
28+
i++;
29+
}
30+
return -1;
31+
}
32+
void addAtHead(int val) {
33+
Node* newNode = new Node(val); // fixed: was hardcoded as 1
34+
if (head == NULL) {
35+
head = tail = newNode;
36+
} else {
37+
newNode->next = head;
38+
head->prev = newNode;
39+
head = newNode;
40+
}
41+
}
42+
void addAtTail(int val) {
43+
Node* newNode = new Node(val);
44+
if (tail == NULL) {
45+
head = tail = newNode;
46+
} else {
47+
tail->next = newNode;
48+
newNode->prev = tail;
49+
tail = newNode;
50+
}
51+
}
52+
void addAtIndex(int index, int val) {
53+
if (index == 0) {
54+
addAtHead(val);
55+
return;
56+
}
57+
Node* temp = head;
58+
int i = 0;
59+
while (temp != NULL && i < index) {
60+
temp = temp->next;
61+
i++;
62+
}
63+
if (temp == NULL && i == index) {
64+
addAtTail(val);
65+
return;
66+
}
67+
if (temp == NULL) return;
68+
Node* newNode = new Node(val);
69+
newNode->next = temp;
70+
newNode->prev = temp->prev;
71+
if (temp->prev != NULL)
72+
temp->prev->next = newNode;
73+
temp->prev = newNode;
74+
}
75+
void deleteAtIndex(int index) {
76+
if (head == NULL) return;
77+
Node* temp = head;
78+
int i = 0;
79+
while (temp != NULL && i < index) {
80+
temp = temp->next;
81+
i++;
82+
}
83+
if (temp == NULL) return;
84+
if (temp->prev != NULL)
85+
temp->prev->next = temp->next;
86+
else
87+
head = temp->next;
88+
if (temp->next != NULL)
89+
temp->next->prev = temp->prev;
90+
else
91+
tail = temp->prev;
92+
delete temp;
93+
}
94+
void printList() {
95+
Node* temp = head;
96+
while (temp != NULL) {
97+
cout << temp->val << " ";
98+
temp = temp->next;
99+
}
100+
cout << endl;
101+
}
102+
};
103+
int main() {
104+
MyLinkedList* obj = new MyLinkedList();
105+
obj->addAtHead(10);
106+
obj->addAtTail(20);
107+
obj->addAtTail(30);
108+
obj->addAtIndex(1, 15); // List becomes 10->15->20->30
109+
cout << "Current List: ";
110+
obj->printList();
111+
cout << "Element at index 2: " << obj->get(2) << endl; // Should print 20
112+
obj->deleteAtIndex(1); // Delete value 15
113+
cout << "After deleting index 1: ";
114+
obj->printList(); // Should be 10->20->30
115+
obj->deleteAtIndex(0); // Delete value 10
116+
cout << "After deleting head: ";
117+
obj->printList(); // Should be 20->30
118+
obj->deleteAtIndex(10); // Invalid index, no change
119+
cout << "After attempting to delete invalid index: ";
120+
obj->printList();
121+
delete obj;
122+
return 0;
123+
}

0 commit comments

Comments
 (0)