void *ListDeleteNode(ListNode *Node) { ListNode *Head, *Prev, *Next; void *Contents; if (Node==NULL) { return(NULL); } Head=ListGetHead(Node); Prev=Node->Prev; Next=Node->Next; if (Prev !=NULL) Prev->Next=Next; if (Next !=NULL) Next->Prev=Prev; if (Head->Next==Node) Head->Next=Next; if (Head->Prev==Node) Head->Prev=Prev; Contents=Node->Item; ListDecrNoOfItems(Node); DestroyString(Node->Tag); free(Node); return(Contents); }
void ListUnThreadNode(ListNode *Node) { ListNode *Head, *Prev, *Next; ListDecrNoOfItems(Node); Prev=Node->Prev; Next=Node->Next; if (Prev !=NULL) Prev->Next=Next; if (Next !=NULL) Next->Prev=Prev; Head=ListGetHead(Node); if (Head) { //prev node of head points to LAST item in list if (Head->Prev==Node) { Head->Prev=Node->Prev; if (Head->Prev==Head) Head->Prev=NULL; } if (Head->Side==Node) Head->Side=NULL; if (Head->Next==Node) Head->Next=Next; if (Head->Prev==Node) Head->Prev=Prev; } //make our unthreaded node a singleton Node->Head=NULL; Node->Prev=NULL; Node->Next=NULL; Node->Side=NULL; }
void *ListDeleteNode(ListNode *Node) { ListNode *Prev, *Next, *Curr; void *Contents; int result; if (Node==NULL) { return(NULL); } Curr=Node->Head; if (Curr) Curr=Curr->Next; while (Curr) { if (Curr->Jump) { if (Curr->Jump==Node) Curr->Jump=NULL; } Curr=ListGetNext(Curr); } Prev=Node->Prev; Next=Node->Next; if (Prev !=NULL) Prev->Next=Next; if (Next !=NULL) Next->Prev=Prev; Contents=Node->Item; ListDecrNoOfItems(Node); DestroyString(Node->Tag); free(Node); return(Contents); }