富阳建设局网站,企业网络拓扑图及配置,网站建设与管理学习什么,网站需求表头指针链表指定位置的删除 实现#xff1a;1#xff0c;先判断传入的数据是否正确#xff0c;然后再判断是否为空表#xff0c;最后判断pos的值是否满足题意 2#xff0c;分删除位置为1和不为1讨论#xff1a;为1时#xff0c;直接将h指向第二个节点并释放第一个节点的…头指针链表指定位置的删除 实现1先判断传入的数据是否正确然后再判断是否为空表最后判断pos的值是否满足题意 2分删除位置为1和不为1讨论为1时直接将h指向第二个节点并释放第一个节点的空间定义一个tmp指向第一个节点不为1时找到插入位置的前一个节点利用tmp遍历其中需要考虑pos的值是否会造成越界 3最后删除pos处的节点注意释放空间防止内存泄漏。
// 删除pos处的节点
int Delete_Pos(Node** h, int pos)
{// 判断传入数据是否正确、是否为空表、pos是否合题意if (NULL h || NULL *h || pos 1){return FALSE;}Node* tmp *h; // 用于保存指针// 如果删除的第一个if (1 pos){*h tmp-next; // h指向第二个节点free(tmp); // 释放空间}else{int i;for (i 0; i pos - 2; i) // tmp遍历到pos前一个节点{// 如果tmp-next不为空那tmp也不为空if (NULL tmp-next){break;}tmp tmp-next;}if (NULL tmp-next) // 如果tmp-next为空则结束{printf (删除位置越界\n);return FALSE;}Node* p tmp-next; // p用来保存删除位置的指针释放空间用tmp-next p-next; // 将pos处节点一处链表free(p); // 释放删除节点的空间}return TRUE;
}
头指针链表的逆序 实现先判断传入数据的正确性然后判断是否是空表最后判断是否只有一个节点——从前往后3个为一组将前两个指向调换以此为循环向后遍历直到结束结束标志为一组中第二个为NULL——最后一步将逆序后的最后一个指向NULL头指针 h 指向逆序后的第一个。
// 逆序
int Reverse_List(Node** h)
{// *hNULL代表空表 (*h)-next代表只有一个节点if (NULL h || NULL *h ||NULL (*h)-next){return FALSE;}// 定义3个指针来实现逆序Node* pre *h;Node* cur (*h)-next;Node* tmp;while (cur) // 从前往后依次逆序{tmp cur-next;cur-next pre;pre cur;cur tmp;}// 头尾的处理(*h)-next NULL; // 将第一个节点指向NULL*h pre; // 头指针 h 指向最后一个节点return TRUE;
}
头指针链表的输出
//输出函数
void Display(Node* h)
{if (NULL h) //判断传入数据是否正确{return;}int count 0; //计数初始化while (h){printf (count % 4 ? %8d : %8d\n, h-data);h h-next;}putchar (\n);
}