链表中一些常用操作

来源:互联网 发布:centos 邮件服务器 编辑:程序博客网 时间:2024/05/22 17:27

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;}
0 0
原创粉丝点击