链表中一些常用操作
2015-04-09 00:00
274 查看
摘要: 笔试中经常问到的链表的操作
1、链表的结构
2、链表的逆序
3、找出倒数第k个
4、找出中间元素
5、判断链表是否有环
1、链表的结构
struct ListNode { int m_nKey; ListNode *m_pNext; };
2、链表的逆序
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; }
3、找出倒数第k个
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if (pListHead == NULL || k == 0) return NULL; ListNode *pAhead = pListHead; ListNode *pBehind = NULL; for (unsigned int i = 0; i < k - 1; i++) { if (pAhead->m_pNext != NULL) pAhead = pAhead->m_pNext; else return NULL; } pBehind = pListHead; while (pAhead-m_pNext != NULL) { pAhead = pAhead->m_pNext; pBehind = pBehind->m_pNext } return pBehind; }
4、找出中间元素
ListNode *Get_middle_node(ListNode *pNode) { ListNode *firstNode = pNode; ListNode *backNode = pNode; while (firstNode != NULL) { firstNode = first->next->next; backNode = backNode->next; } return backNode; }
5、判断链表是否有环
bool judge_list_cricle(ListNode *node) { if (node == NULL) return false; ListNode *first = node; ListNode *back = node; while(firt->next!=NULL && back->next->next!=NULL) { first = first->next; back = back->next->next; if (first == back) return ture; } return false; }
相关文章推荐
- 链表的一些常用操作
- 链表中一些常用操作
- C#中一些字符串操作的常用用法
- (转发)一些常用的针对文件进行的操作
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- php简单封装了一些常用JS操作
- C#中一些字符串操作的常用用法
- 一些字符串操作的常用用法
- php简单封装了一些常用JS操作
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- [收藏]C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法
- C#中一些字符串操作的常用用法