本文主要是介绍【单链表经典面试题解析三】在无头单链表的一个非头节点前插入一个节点(要求不能遍历单链表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每次再遇到单链表的题时,别慌,先好好审题,抓住重点。这道题其实很简单,只要注意到题目的重点,首先是非头结点,然后是前差一个新节点,再就是要求不能遍历单链表。
我们可以先给单链表的一个非头结点后插一个新节点,这个很简单,很容易完成吧,但是好像和题目有点不一样,没关系,我们再把这个非头结点和新节点值给换一换,这样就符合题目要求了,是不是很机智呢!不过感觉文字描述的不太好,看得云里雾里的,接下来我们上一副示意图表示,示意图如下所示:
首先给单链表的一个非头结点后插一个新节点(图稍稍有点丑)
接下来就给pos节点和新节点换值域的值
代码如下所示:
#include<stdio.h>
#include<assert.h>
#include<malloc.h>typedef int DataType;
typedef struct Node
{DataType _data;struct Node * _pNext;
}*pNode;//创建一个新节点
pNode BuyNode(DataType data)
{pNode pNewNode = (pNode)malloc(sizeof(struct Node));if(NULL == pNewNode){assert(0);return NULL;}pNewNode->_data = data;pNewNode->_pNext = NULL;return pNewNode;
}// 非头结点前插入data
void InsertNotHead(pNode pos,DataType data)
{pNode pNewNode;pNode pCur;if(NULL == pos)return;pNewNode = BuyNode(data);if(NULL == pNewNode)return;pCur = pos;pNewNode->_pNext = pCur->_pNext;pCur->_pNext = pNewNode;DataType temp = 0;temp = pCur->_data;pCur->_data = pNewNode->data;pNewNode->_data = temp;
}
注意:编写代码时一定要对传入的参数进行检测,确保安全后方可使用。
这篇关于【单链表经典面试题解析三】在无头单链表的一个非头节点前插入一个节点(要求不能遍历单链表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!