访问单个节点的删除
2016-02-25 20:00
239 查看
题目:实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true
分析:对于单向链表,要删除一个节点A,只要找到节点A的前驱节点AA,然后修改AA指向下一个节点的值,将其指向A节点的后继即可,但本题有限制,已知要删除的节点,又因为是单链表,所以无法获得其前面一个节点的指针,巧妙的做法是将要删除节点的后一个节点的值拷贝到要删除的节点,然后删除要删除节点的后一个节点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Remove {
public:
bool removeNode(ListNode* pNode) {
// write code here
if(pNode->next==NULL)
return false;
ListNode *t = pNode->next;
pNode->val=t->val;
pNode->next=t->next;
free(t);
return true;
}
};
分析:对于单向链表,要删除一个节点A,只要找到节点A的前驱节点AA,然后修改AA指向下一个节点的值,将其指向A节点的后继即可,但本题有限制,已知要删除的节点,又因为是单链表,所以无法获得其前面一个节点的指针,巧妙的做法是将要删除节点的后一个节点的值拷贝到要删除的节点,然后删除要删除节点的后一个节点。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Remove {
public:
bool removeNode(ListNode* pNode) {
// write code here
if(pNode->next==NULL)
return false;
ListNode *t = pNode->next;
pNode->val=t->val;
pNode->next=t->next;
free(t);
return true;
}
};
相关文章推荐
- 进程环境 知识点汇总《APUE》 chapter-7
- install php
- JNIEnv常用方法
- VS2010添加类失败问题,弹出错误框,提示 CodeModel操作失败,无法访问标记数据库
- 《leetCode》:Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode] 212. Word Search @python
- iptables实现网络防火墙及地址转换
- 10 循环和自增-DirectX游戏开发初级教程
- H5手游也能月流水千万!您还在靠IP拉客?
- 毕业前夕一
- 最小的k个数
- iptables实现网络防火墙及地址转换
- Andorid DexClassLoader的创建过程解析(基于5.0)
- Android Studio
- Oil Deposits
- android开发oom,图片缓存
- 哪些晦涩难懂的shell命令都是什么的缩写?
- Android摘抄总结
- IOS UI-控制器的创建和控制器的View的创建
- 21. Merge Two Sorted Lists