Witam, pisze sobie implementacje listy jednokierunkowej na zajęcia mam taki kod:
#include<iostream>
using namespace std;
struct Node
{
int val;
Node *next;
};
void insertHead(Node *&head, int val)
{
Node *newNode = new Node;
newNode->val = val;
newNode->next = head;
head = newNode;
}
void insertAfter(Node *item, int val)
{
Node *nowy = new Node;
nowy->val = val;
nowy->next = item->next;
item->next = nowy;
}
void deleteList(Node *&head) {
Node *tmp;
while(head != NULL) {
tmp = head;
head = tmp->next;
delete tmp;
}
}
bool deleteItem(Node *&item) {
Node *tmp = item->next;
if(tmp != NULL) {
item->val = tmp->val;
item->next = tmp->next;
delete tmp;
return true;
}
return false;
}
void deleteAfter(Node *&item)
{
Node *tmp = item->next;
item->next = tmp->next;
delete tmp;
}
void deleteBefore(Node *&head, Node *&item);
void insertBefore(Node *item, int val) {
Node *tmp = new Node;
tmp->val = item->val;
item->val = val;
tmp->next = item->next;
item->next = tmp;
}
void printList(Node *head)
{
while( head != NULL )
{
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
Node* findValue(Node *head, int Value)
{
Node *found = new Node;
while(head != NULL)
{
if (head->val == Value)
{
found->val = head->val;
found->next = head->next;
return found;
}
head = head->next;
}
return NULL;
}
int main()
{
Node *head = NULL;
insertHead(head,0);
insertHead(head,1);
insertHead(head,3);
insertHead(head,4);
printList(head);
deleteAfter(head);
printList(head);
system("pause");
return 0;
}
Mam problem z funkcja deleteBefore która będzie usuwała węzeł przed wskazanym i zastanawiam się czy jest możliwe napisanie tej funkcji jeśli nie możemy odnieść się do poprzedniego elementu w liście