Chapter07 链表(下):如何轻松学出正确的链表代码?

技巧一:理解指针或引用的含义

技巧二:指针丢失和内存泄漏

技巧三:利用哨兵简化实现难度

技巧四:重点留意边界条件处理

如果链表未空时,代码是否能够正常运行

如果链表只包含一个节点时,代码能否正常运行

如果链表只包含两个节点时,代码能否正常运行

代码逻辑在处理头节点和尾节点的时候,能否正常运行

技巧五:举例画图

技巧六:多谢多练,没有捷径

单链表反转

Node* List::ReversalList()

{

Node* pPreNode = NULL;

Node* pNextNode = NULL;

Node* pCurrentNode = pHead;

while(pCurrentNode != NULL)

{

pNextNode = pCurrentNode->pNext;

if(pNextNode == NULL)

{

  pHead = pCurrentNode;

}

  pCurrentNode->pNext = pPreNode;

  pPreNode = pCurrentNode;

  pCurrentNode = pNextNode;

}

return pHead;

}

链表中环的检测

//fast slow pointer function

bool List::IsRecircleList()

{

  Node *pSlow,*pFast;

  pSlow = pFast = pHead;

  while(pSlow != NULL && pFast->pNext->pNext != NULL)

  {

    pSlow = pSlow->pNext;

    pFast = pFast->pNext->pNext;

    if(pSlow == pFast)

    return true;

  }

  return false;

}

两个有序链表的合并

删除链表倒数第n个节点

求链表的中间节点

猜你喜欢

转载自www.cnblogs.com/zhaohu/p/9975008.html