初学数据结构,自己写单向链表时遇到如下问题
typedef struct lNode* list;
struct lNode
{
int val;
list next;
};
//尾插法插入节点
void addList(list& l, int val)
{
list lastCell = new lNode;
lastCell->val = val;
list temp = l; //构建临时节点指向表头
if (!l) //是否为第一个插入点
{
l = lastCell;
return;
}
while (l->next) //不为空则找到链表最后一个节点
{
l = l->next;
}
l->next = lastCell;
l = temp; //遍历后重新使l指向表头
}
int main()
{
list l = new lNode;
l = NULL; //这里置空是为了方便判断第一个插入点
addList(l, 1);
addList(l, 2);
printList(l); //打印链表
return 0;
}
然后报错访问权限问题
发现是这类通常由链表初始化问题引起,参考以下文章:
C++读取访问权限冲突引发异常问题_Gabriel17的博客-CSDN博客_读取访问权限冲突解决:引发了异常: 读取访问权限冲突。
L 是 0xCDCDCDCD。
_断然Juvenile的博客-CSDN博客_引发了异常读取访问权限冲突参考第二篇文章发现了细节问题:申请到的List结点,其成员List next并不为空,然而遍历时却对其访问从而引发问题。 下图即为报错时链表尾l->next的地址。
解决方案:
手动置尾插元素的next成员为nullptr
void addList(list& l, int val)
{
list lastCell = new lNode;
lastCell->val = val;
lastCell->next = NULL; //这里做修改!!!
list temp = l;
if (!l)
{
l = lastCell;
return;
}
while (l->next)
{
l = l->next;
}
l->next = lastCell;
l = temp;
}
然后就可以正常输出了。
小白刚开始数据结构的学习,如有高见请不吝赐教,谢谢
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)