单向链表(三) 在指定位置插入新的节点
来源:互联网 发布:sentinel1数据下载 编辑:程序博客网 时间:2024/06/15 23:45
1、要向链表中插入新的数据,就要插入一个新的节点,下面是一幅示意图:
2、说明:原始链表为1 -> 2 -> 3 -> 4 -> NULL, 添加一个数据“5”至第3个节点,只要使第2个节点指向新节点(值为5的节点),使新节点指向原来的第3个节点(值为3的节点)就行了。
3、更通俗地讲,就是在“2”与“3”之间的“红色箭头”上添加一个”5“,红箭头变为两个蓝箭头。
4、实现函数:
tagNode* InsertNode(tagNode *pHead, int location, int value){tagNode *pNewHead = NULL; // 新的头结点tagNode *pNewNode = NULL; // 新节点tagNode *pTemp = pHead; // 临时节点int nCount = 1;char choose = 'y';if (pHead == NULL){printf("链表为空!\n");return pHead;}// 如果要插入的是头结点(location == 1)if (location == 1){pNewHead = (tagNode *)malloc(sizeof(tagNode));pNewHead->value = value;pNewHead->pNext = pHead;return pNewHead;}nCount++;// 插入非头结点while (pTemp->pNext) // 注:当前节点为(pTemp->pNext),而pTemp为当前节点的前一个节点{if(location == nCount){// 创建一个新的节点pNewNode = (tagNode *)malloc(sizeof(tagNode));pNewNode->value = value;pNewNode->pNext = pTemp->pNext; // 使新节点 指向 当前节点pTemp->pNext = pNewNode; // 使当前节点的前一节点 指向 新节点return pHead;}else{pTemp = pTemp->pNext;nCount++;}}printf("位置%d超出链表节点数,是否添加到链表末尾(y/...):\n", location);scanf("%c", &choose);getchar();if (choose == 'y'){// 创建一个新节点pNewNode = (tagNode *)malloc(sizeof(tagNode));pNewNode->value = value;pNewNode->pNext = NULL;pTemp->pNext = pNewNode; // 使 尾节点 指向 新节点}return pHead;}
或
void InsertNode(tagNode **pHead, int location, int value){tagNode *pNewHead = NULL; // 新的头结点tagNode *pNewNode = NULL; // 新节点tagNode *pTemp = *pHead; // 临时节点int nCount = 1;char choose = 'y';if (pHead == NULL){printf("链表为空!\n");return;}// 如果要插入的是头结点(location == 1)if (location == 1){pNewHead = (tagNode *)malloc(sizeof(tagNode));pNewHead->value = value;pNewHead->pNext = *pHead;*pHead = pNewHead;return;}nCount++;// 插入非头结点while (pTemp->pNext) // 注:当前节点为(pTemp->pNext),而pTemp为当前节点的前一个节点{if(location == nCount){// 创建一个新的节点pNewNode = (tagNode *)malloc(sizeof(tagNode));pNewNode->value = value;pNewNode->pNext = pTemp->pNext; // 使新节点 指向 当前节点pTemp->pNext = pNewNode; // 使当前节点的前一节点 指向 新节点return;}else{pTemp = pTemp->pNext;nCount++;}}printf("位置%d超出链表节点数,是否添加到链表末尾(y/...):", location);scanf("%c", &choose);getchar();if (choose == 'y'){// 创建一个新节点pNewNode = (tagNode *)malloc(sizeof(tagNode));pNewNode->value = value;pNewNode->pNext = NULL;pTemp->pNext = pNewNode; // 使 尾节点 指向 新节点}}
5、main函数中调用:
int _tmain(int argc, _TCHAR* argv[]){tagNode *p = NULL;p = CreateLinkedList();int location;int value;printf("\n\n遍历:\n");TraverseNodes(p);/*printf("\n\n请输入待删除的节点位置:");scanf("%d", &location);getchar();//p = DeleteNode(p, location);DeleteNode(&p, location);*/printf("\n\n请输入待插入的节点位置和值:");scanf("%d %d", &location, &value);getchar();//p = InsertNode(p, location, value);InsertNode(&p, location, value);printf("\n\n遍历:\n");TraverseNodes(p);FreeLinkedList(p);getchar();return 0;}
6、运行结果:
0 0
- 单向链表(三) 在指定位置插入新的节点
- 单向链表(二) 删除指定位置的节点
- 单向链表插入新节点
- 删除单向链表的指定节点
- 遍历XML,在指定位置插入节点
- 在指定位置插入新列
- 在指定位置插入新列
- 【算法之链表(三)】单链表中,在仅允许使用一个指针的情况下,在指定的节点前面插入以及删除一个节点
- 单向链表的节点插入与删除
- 插入新结点到指定结点的指定位置
- 指定位置插入新字符串
- 指定位置插入新字符串
- 在指定的位置后插入字符串
- 在latex的指定位置插入图表
- 在XML文件中的非根节点下插入新节点时,出现“未指定错误”的处理
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- C语言实现链表之单向链表(九)在任意位置插入结点
- dom4j插入节点到指定位置
- Hibernate 可能遇见的一个错误
- LeetCode刷题笔录Jump Game
- u-boot-2009.08在mini2440上的移植 增加SD卡功能
- N-Queens II
- Python 正则表达式验证zip code (U.S.邮政编码)
- 单向链表(三) 在指定位置插入新的节点
- 转:ffmpeg解码流程
- 老BOJ 03 Guess
- oracle 11g警告日志和监听日志删除方法示例
- 老BOJ 05 Permutation
- python处理文本文件实现生成指定格式文件的方法
- python删除java文件头上版权信息
- 老BOJ 06 Flip Game
- 老BOJ 07 Fence Repair