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;
}