您的位置:首页 > 其它

链表中一些常用操作

2015-04-09 00:00 274 查看
摘要: 笔试中经常问到的链表的操作

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表