In theory, if you have a pointer to node N, you can save the pointer to the next node (node N+1), then just copy the contents of node N+1 into the memory space occupied by node N. Then free the original node N+1. Like this, for a simple C structure:
Code:
void deleteNode( struct data *node )
{
struct data *next = node->next;
*node = *next;
free( next );
return;
}
That ignores any complications that could be caused by copying data, references to node N+1 from outside the list, and any side effects of freeing the original node N+1.
So, in practice, in all but trivial cases you'd never do that.
Suppose to have:
struct Tstudent
{
string name, surname;
int matriculation_num;
};
struct Tnode
{
Tstudent* student;
Tnodo* next;
} L;I want to deference that "student" pointer. For example, I tried with:
*(L->student).matriculation_numbut it not worked, as terminal... (4 Replies)
hi all,
i need a c++ function which converts a linear list to circular.
presently i am working with two files. i.e., one linear list file. and one circular list file to do some operations. i thought it will be helpful if there is a function that converts a linear list to circular n undo the... (1 Reply)
If i have a linked list in C, how do I edit a node in it? Without ruining the whole list, by this i mean end up making it null or circular... (since it has to be linear and has to stop somewhere):wall:
Can some one provide an example, making it have like 5 nodes, and then edit a string of the... (3 Replies)
Hi, I am programming in kernel, and I want to use a double linked list that holds infos that every process could access and modify THIS list. So, I suppose it is a 'global' variable since every process(thread) can reach it, I am wondering where to put it? by changing some of the kernel files? (1 Reply)
Program to reverse a linked list by traversing only once. (1 Reply)
Discussion started by: VSSajjan
1 Replies
LEARN ABOUT NETBSD
ulist
UList(3U) InterViews Reference Manual UList(3U)NAME
UList - circular, doubly-linked list class
SYNOPSIS
#include <Unidraw/ulist.h>
DESCRIPTION
UList implements a circular, doubly-linked list. The sentinel and each entry in the list are instances of the UList class, each containing
a void pointer to the data they contain as well as pointers to the next and previous UList instance in the list. The sentinel UList
instance is considered to represent the list.
PUBLIC OPERATIONS
UList(void* = nil)
Create a new UList instance, optionally supplying the value for the void pointer it stores.
virtual ~UList()
Delete the entire list. Normally the sentinel, which represents the list, is the entry that is deleted explicitly. Note that the
data on the list, stored as void*'s, cannot be deleted in this manner.
void Append(UList*)
void Prepend(UList*)
When performed on the sentinel, Append appends an element to the end of the list and Prepend prepends it to the beginning of the
list. When performed on a UList instance other than the sentinel, Append has the effect of inserting its argument before the
instance, while Prepend has the effect of inserting it after the instance.
void Remove(UList*)
Unlink the specified UList instance from the list it is in. The object on which this operation is called is irrelevant.
void Delete(void*)
Find the UList instance in this list containing the given void pointer, remove it from the list it is in, and delete it.
UList* Find(void*)
Return the UList instance in this list containing the given void pointer.
UList* First()
UList* Last()
UList* End()
UList* Next()
UList* Prev()
Return various UList instance in the list relative to this, i.e., as if it were the sentinel. End returns the sentinel (this) and
is useful for detecting the end of an iteration through the list; the other operations are self-explanatory.
boolean IsEmpty()
Return whether or not the list has any elements.
void* operator()()
Return the void pointer that the UList stores.
UList* operator[](int i)
Return the ith UList in the list, where the next element is the first, etc.
Unidraw 3 October 1990 UList(3U)