【CareerCup】 Linked Lists—Q2.3
来源:互联网 发布:java中方法的意思 编辑:程序博客网 时间:2024/05/22 01:32
转载请注明出处:http://blog.csdn.net/ns_code/article/details/21869493
题目:
Implement an algorithm to delete a node in the middle of a single linked list, given only access to that node.
EXAMPLE
Input: the node ‘c’ from the linked list a->b->c->d->e
Result: nothing is returned, but the new linked list looks like a->b->d->e
翻译:
设计一个算法来删除单链表中间的一个节点,但是仅仅给出指向当前要删除节点的指针。
例子:
输入:指向链表a->b->c->d->e中结点c的指针
结果:不需要返回什么,但是新的链表应该是:a->b->d->e
思路:
在单链表中,如果要删除一个节点,我们一般都需要知道该节点的前一个节点,这样在删除该节点后,才能将单链表重新连起来,可以现在只知道当前节点,而不知道其前面的节点,那我们就只能从后面的节点着手考虑。认准了这一点,应该不难想到该题的解决方法,我们可以将当前节点和其后面一个节点的数据交换,而后删除后面的节点即可,这样最终得到的链表完全符合题目的要求(如果你非要认准了删除当前节点,而不是当前节点的中的数据,那该题就木有解法了,而且本题的意图应该也是让我们关注最终删除后得到的链表)。
当然了,开始写代码前要考虑边界情况(这在面试中很重要,尤其要体现在代码中),给定指针指向首节点和链表中间的某个节点的情况均属于一般情况,这里的边界情况有两种:
1、给定指针为NULL,不做任何处理即可;
2、给定指针所指节点为链表的尾节点(这个是最容易处理出错的一种边界情况,当然也会是面试中考察的重点),如果直接删除该尾节点,那其前面一个节点的next指针就成了野指针(悬垂指针),可能会带来一些意想不到的错误。这时候我们可以选择和边界情况1一样,不处理这种情况,直接返回,也可以不删除该节点,只是将其中的数据设为一些特殊字符(如'\0'),从而打印时不会打印出来。这种情况没有比较完美的处理方法,但必须要考虑到其可能带来的危险性,我们这里直接不处理这种情况。
实现代码:
/*删除p所指的节点中的数据*/void removeNode(PNODE p){if(!p || !p->pNext)return;PNODE r = p->pNext;p->data = r->data;p->pNext = r->pNext;free(r);r = NULL;}单链表的实现代码与Q2.1中相同,用的以前写的单链表的代码,这里不再贴出。
测试结果:
- 【CareerCup】 Linked Lists—Q2.3
- 【CareerCup】 Linked Lists—Q2.1
- 【CareerCup】 Linked Lists—Q2.2
- 【CareerCup】 Linked Lists—Q2.4
- 【CareerCup】 Linked Lists—Q2.5
- 【CareerCup】 Linked Lists—Q2.4
- CareerCup chapter 2 Linked Lists
- 【算法】【CareerCup】Chapter 2----Linked Lists
- Q2.3
- leetCode(3):Intersection of Two Linked Lists
- Leetcode题集——Merge linked lists
- Linked Lists Part1-Singly Linked Lists
- 【CareerCup】 Arrays and Strings—Q1.3
- 【CareerCup】Stacks and Queues—Q3.3
- 【CareerCup】Trees and Graphs—Q4.3
- [leetcode]Intersection of Two Linked Lists —— 熟悉python
- Python学习——leetcode(Intersection of Two Linked Lists)
- LeetCode160——Intersection of Two Linked Lists
- Python操作redis
- java 中 json的创建和转换
- 链表插入(线性表)
- Hadoop1.1.2学习笔记(2)
- java基础_09_集合
- 【CareerCup】 Linked Lists—Q2.3
- 解决python中matplotlib绘图中文显示问题
- AndroidTips]Android软件测试的日志文件抓取简介
- HDU Pearls
- 大数阶乘
- CMake 的安装与使用
- UML---Component diagrams
- ZOJ-3317
- OOAD作业--ubuntu 12.04LTS 64bit编译安装Opencv2.4.3