您的位置:首页 > 职场人生

【单链表经典面试题解析三】在无头单链表的一个非头节点前插入一个节点(要求不能遍历单链表)

2017-10-18 14:58 288 查看

   
每次再遇到单链表的题时,别慌,先好好审题,抓住重点。这道题其实很简单,只要注意到题目的重点,首先是非头结点,然后是前差一个新节点,再就是要求不能遍历单链表。

   我们可以先给单链表的一个非头结点后插一个新节点,这个很简单,很容易完成吧,但是好像和题目有点不一样,没关系,我们再把这个非头结点和新节点值给换一换,这样就符合题目要求了,是不是很机智呢!不过感觉文字描述的不太好,看得云里雾里的,接下来我们上一副示意图表示,示意图如下所示:
   首先给单链表的一个非头结点后插一个新节点(图稍稍有点丑)



   接下来就给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;
}


   注意:编写代码时一定要对传入的参数进行检测,确保安全后方可使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 单链表
相关文章推荐