单链表和双链表在执行删除操作时的…
来源:互联网 发布:淘宝开店怎么装修店铺 编辑:程序博客网 时间:2024/06/01 10:47
写双链表的删除操作时,一开始是采用单链表的方法。在执行的时候,删除非末尾节点还正常,但当删除的节点时最后一个节点时,执行时会返回位置(也就是指针)出错无法执行的情况。调试了好多次,也没找到原因。通过思考,最终找到了两者的区别,以下是两个操作的代码:
单链表删除:
- Node
*delete_element_list(Node int*head, i) - {
-
Node *p; -
p=head; -
int j = 0; -
if(i>length(head)||i<1) -
{ -
cout<<"error"<<endl; -
return NULL; -
} -
while(p->next&&j<i-1) -
{ -
p=p->next; -
j++; -
} -
Node *q; -
q=p->next; -
p->next=q->next; -
free(q); -
return head; - }
- Node
*deleteElement(Node int*head, i) - {
-
if(i>length(head)||i<1)//错误的删除位置 -
{ -
cout<<"error!"<<endl; -
return NULL; -
} -
int j = 0; -
Node *temp; -
temp = head->next; -
while(j<i-1&&temp)//这里也是说要依次从j=0-i才能找到第i个元素啊,为什么前面的文章说他是 -
{ -
j++; -
temp = temp->next; -
} -
if(temp->next==NULL) -
{ -
temp->prior->next=NULL;//此步骤是关键,在删除最后一个节点时,需要将其的prior改为尾节点 -
free(temp); -
-
} -
else -
{ -
-
temp->prior->next=temp->next; -
temp->next->prior=temp->prior; -
free(temp); -
} -
return head; - }
得到的一点启示就是:写代码的时候要多考虑一些极限情况,对于上面的情况若删除的不是尾节点,则单链表的方法就可以解决两者。但是对于尾节点的情况就不同了。想的和做的差别真的很大,尤其是写代码。只有写的时候调试的时候一些隐藏的错误才会暴露出来。一句话:写代码要多“挑刺”。
- 单链表和双链表在执行删除操作时的…
- (三)单链表和双链表在执行删除操作时的区别
- 如何在客户端通过MSSQL执行某操作删除服务器的指定文件
- 在网页端进行添加和删除记录的操作。
- 单链表的插入和删除操作
- 单链表的插入和删除操作
- delete和all-delete-orphan在进行删除操作时的不同
- delete和all-delete-orphan在进行删除操作时的不同
- 构建执行插入、更新和删除操作的Web应用程序(上)
- &&和|| 在执行语句时的差别
- 在做到3.1.3执行效果时的操作说明
- Progressbardialog在执行sqlite操作时不显示的解决办法
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- oracle日志操作模式(归档模式和非…
- DBA 面试笔试问题集
- Oracle归档模式的命令及参数说明
- Oracle Partition 分区详细总结
- 【Unity】Update()和FixedUpdate()
- 单链表和双链表在执行删除操作时的…
- 栈定义及其基本操作,顺序栈和链栈
- ecplise和lomboz和tomcat配置
- Java实现冒泡排序和快速排序,选择…
- JAVA泛型详解
- Oracle SQL性能优化-1
- Eclipse版本命名奥秘 J2EE
- Eclipse 下J2EE 开发与解释
- java面试