单链表反转 - 有序链表合并 - 子树包含
来源:互联网 发布:最短路径优先算法 编辑:程序博客网 时间:2024/06/09 20:51
链表定义:
struct ListNode{int m_nValue;ListNode* m_pNext;};1。题目描述:
定义一个函数:输入一个链表的头结点,反转该链表并输出反转后链表的头节点。
ListNode* ReverseList(ListNode* pHead){ ListNode* pReversedHead = NULL; ListNode* pNode = pHead; ListNode* pPrev = NULL; while(pNode != NULL) { ListNode* pNext = pNode->m_pNext; if(pNext == NULL) pReversedHead = pNode; pNode->m_pNext = pPrev; pPrev = pNode; pNode = pNext; } return pReversedHead;}需要考虑链表的健壮性。
pHead为空?只有一个节点?
2.合并两个有序链表
题目描述:
输入两个递增排序的链表,合并这两个链表并使合并后的链表任是递增有序。
ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ if(pHead1 == NULL) return pHead2; else if(pHead2 == NULL) return pHead1; ListNode* pMergedHead = NULL; if(pHead1->m_nValue < pHead2->m_nValue) { pMergedHead = pHead1; pMergedHead->m_pNext = Merge(pHead1->m_pNext, pHead2); } else { pMergedHead = pHead2; pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext); } return pMergedHead;}需要考虑:链表是否为空,哪一个为空或者都为空,这些影响程序健壮性的情况。
3.子树包含
题目描述:
输入两棵二叉树A和B,判断B是否是A的子树。
二叉树结构定义如下:
struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};
bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){ bool result = false; if(pRoot1 != NULL && pRoot2 != NULL) { if(pRoot1->m_nValue == pRoot2->m_nValue) result = DoesTree1HaveTree2(pRoot1, pRoot2); if(!result) result = HasSubtree(pRoot1->m_pLeft, pRoot2); if(!result) result = HasSubtree(pRoot1->m_pRight, pRoot2); } return result;}bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){ if(pRoot2 == NULL) return true; if(pRoot1 == NULL) return false; if(pRoot1->m_nValue != pRoot2->m_nValue) return false; return DoesTree1HaveTree2(pRoot1->m_pLeft, pRoot2->m_pLeft) && DoesTree1HaveTree2(pRoot1->m_pRight, pRoot2->m_pRight);}首先找到第一相同的节点,即子树B的跟节点相同的节点:HasSubtree
然后,从该节点开始比较,直到判断A和B完全相同为止:DoesTree1HaveTree2
- 单链表反转 - 有序链表合并 - 子树包含
- 有序链表合并&有序数组合并
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 有序链表合并
- 合并有序链表
- 合并有序链表
- 合并有序链表
- 有序链表合并
- 合并有序链表
- TOUCHINPUT 结构
- 优先级运算
- 子窗体
- 栈帧
- [delphi]ComboBox实现显示文本与值不同的方法
- 单链表反转 - 有序链表合并 - 子树包含
- sysv-rc-conf管理Ubuntu server开机启动服务
- MFC学习建议
- C#反射机制小运用
- Vim配置系列(二) —- 好看的statusline
- Java Class对象的引用
- Toast 通知(Windows 应用商店应用)
- 删除 setup.py 安装的 Python 软件包
- 常用的webservice接口