【单链表经典面试题解析三】在无头单链表的一个非头节点前插入一个节点(要求不能遍历单链表)
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; }
注意:编写代码时一定要对传入的参数进行检测,确保安全后方可使用。
相关文章推荐
- C语言:【单链表】在无头单链表的一个非头节点前插入一个节点
- 给你一个链表和一个 random函数, 设计一个算法能随机返回链表的某个节点, 要求每个节点被返回的概率一样。限制条件是只能遍历链表一次并且不能用额外空间。
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- C语言:【单链表】在无头单链表的一个非头节点前插入一个节点
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- 剑指offer 15---查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)
- C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
- 在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)
- 在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)
- Java面试题多思路解析--有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
- C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- 查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找单链表的倒数第k个节点,要求只能遍历一次链表
- 查找单链表的中间节点,要求只能遍历一次链表
- 查找单链表的中间节点,要求只能遍历一次链表
- 在无头单链表的一个非头节点前插入一个节点(C语言)