非尾专题

1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表

1.删除一个无头单链表的非尾节点 这里主要是采用数据替换,将需要删除的节点的下一个结点放在需要删除结点的位置,依次将需要删除结点的后续结点前移,即可完成删除。 void DeleteNotTail(pNode pos){pNode cur = pos->_next;assert(pos->_next); //数据替换pos->_data = pos->_n

【单链表经典面试题解析二】删除一个无头单链表的非尾节点(不能遍历链表)

要在不能遍历一遍单链表的情况下,删除单链表的非尾结点。我们可以试试如下这种方法:   首先,我们先建立一个节点pCur,令节点pCur指向要删除的节点pos的下一个节点,然后,我们先把pCur的值赋给pos,然后再删除掉pCur这个节点,示意图如下所示:   令节点pCur指向要删除的节点pos的下一个节点:   我们先把pCur的值赋给pos,然后再删除掉pCur这个节点:

删除一个无头单链表的非尾节点(不能遍历链表)

我们在对单链表进行删除操作的时候,只需要遍历一遍链表即可删除,但是如果不允许遍历链表我们要怎样进行处理呢。 我们如果直接释放掉要删除的节点,那我们就无法得到前一个节点,链表就不能重新链接起来,我们可以将要删除节点的内容改为,该节点下一个节点的内容,然后释放下一节点,这样便不需要知道前一个节点即可完成删除并重新链接。 typedef struct SListNode{struct SLis

在结点类型为DLink Node 的双链表中将p所指结点(非尾结点)与其后继结点交换的操作

在结点类型为DLink Node 的双链表中将p所指结点(非尾结点)与其后继结点交换的操作 C语言题解 #include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct Node{int data;struct Node *next,*prior;}DNode,*DLinkList;void InitList(

链表--删除一个无头单链表的非尾节点

方法: 因为是无头的(参数不传头),所以不能遍历。 判断此结点是不是要删除的结点,如果是,则将下一个值覆盖过来,删除下一个结点。 void DeleteNode(ListNode* posNode){if(posNode){ListNode* pNext = posNode->Next;posNode->Value = pNext->Value;posNode->Next = pNext-

删除无头单链表的非尾节点

删除无头单链表的非尾节点:可以转化为删除该节点的下一个节点,删除之前把之传给该节点即可。 可以不要返回值,此处我加上返回值信息是为了判断是否删除成功。   int DelNotTail(Node* pos) //删除非尾节点{if(pos == NULL || pos->_next == NULL)return -1;else //让pos保存pos下个节点的值,然后删除