一、无头单链表的非尾节点删除(不能遍历链表)
我们无法删除该节点,我们可以下一个节点的值给该节点,再删除下一个节点
代码如下:
void NoHeadSeqListDelete(SListNode *pos) //删除一个无头链表的非尾节点(不能遍历链表)
{
SListNode*tmp;
tmp=pos->_next; //保存pos->_next的值,方便一会销毁
pos->_data=pos->_next->_data;
pos->_next=pos->_next->_next;
free(tmp); //销毁pos->_next
tmp=NULL;
}
二、无头单链表的插入(不能遍历链表)
和删除方法类似,我们不能直接在原节点前面插入,我们可以创建新节点,把新节点的值和原节点交换。
代码如下:
//创建一个新节点,替换原来的插入节点的值,再把插入值赋给原节点
void NoHeadSeqListInsert(SListNode*pos,DataType x) //在无头链表的一个节点前插入一个节点(不能遍历链表)
{
SListNode *newNode;
newNode=BuySListNode(x); //创建新节点
newNode->_next=pos->_next;
pos->_next=newNode;
newNode->_data=pos->_data;
pos->_data=x;
}
三、运行结果
这两个代码较简单,就不分别测试了,同一结果看下图。