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

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

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


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

   注意:编写代码时一定要对传入的参数进行检测,确保安全后方可使用。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值