【剑指Offer】中链表
来源:互联网 发布:阿里云客服好干吗 编辑:程序博客网 时间:2024/05/24 03:21
- 链表的节点定义
struct ListNode{ int m_nValue; ListNode* m_pNext;};
- 给链表的末尾添加一个节点
void AddToTail(ListNode** pHead, int value){ ListNode* pNew = new ListNode(); pNew->m_nValue = value; pNew->m_pNext = NULL; if (*pHead == NULL){ *pHead = pNew; } else{ ListNode* pNode = *pHead; while (pNode->m_pNext != NULL) pNode = pNode->m_pNext; pNode->m_pNext = pNew; }}
- 在链表中找到第一个含有某值的节点并且删除该节点
void RemoveNode(ListNode** pHead, int value){ if (pHead == NULL || *pHead == NULL) return; ListNode* pToBeDeleted = NULL; if ((*pHead)->m_nValue == value) { pToBeDeleted = *pHead; *pHead = (*pHead)->m_pNext; } else { ListNode* pNode = *pHead; while (pNode->m_pNext != NULL && pNode->m_pNext->m_nValue != value) pNode = pNode->m_pNext; if (pNode->m_pNext != NULL && pNode->m_pNext->m_nValue == value) { pToBeDeleted = pNode->m_pNext; pNode->m_pNext = pNode->m_pNext->m_pNext; } } if (pToBeDeleted != NULL) { delete pToBeDeleted; pToBeDeleted = NULL; }}
- 输入一个链表的头节点,从尾到头反过来打印出每个节点的值
1>用栈实现
void PrintListReversingly_Iteratively(ListNode* pHead){ stack<ListNode*>nodes; ListNode* pNode = pHead; while (pNode != NULL) { nodes.push(pNode); pNode = pNode->m_pNext; } while (!nodes.empty()) { pNode = nodes.top(); cout << pNode->m_nValue << ' '; nodes.pop(); }}
2>用递归实现
void PrintListReversingly_Iteratively(ListNode* pHead){ if (pHead != NULL){ if (pHead->m_pNext != NULL){ PrintListReversingly_Iteratively(pHead->m_pNext); } cout << pHead->m_nValue << ' '; }}
0 0
- 【剑指Offer】中链表
- 剑指OFFER
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 剑指Offer
- 剑指offer
- 剑指offer
- 《剑指offer》
- 剑指Offer
- 剑指offer
- ^A在linux的处理
- 375. Guess Number Higher or Lower
- Fesco的SimpleDraweeView属性
- 通配符
- 索引和约束的创建
- 【剑指Offer】中链表
- 我的梦想
- Eclipse调试Java的10个技巧
- RxJava使用详解二
- runtime 实现 归档和解档
- Android补间动画(5)所有动画集合
- MySQL中文乱码问题
- Qt之QThread(深入理解)
- 算术表达式的转换