本文實例講述了C++刪除鏈表中間節點的方法。分享給大家供大家參考,具體如下:
題目:
給定鏈表頭結點head,實現刪除鏈表的中間節點函數。
解題思路及代碼:
快慢指針,快指針走兩步,慢指針一步。
當快指針走到終點時,慢指針正好是鏈表中間節點,刪除此節點即可。
鏈表結構定義:
typedef struct Node{ int data; struct Node* next;}node, *pLinkedList;
算法C++代碼:
Node* removeMidNode(pLinkedList head){ if (head->next == NULL || head == NULL) return head; if (head->next->next == NULL) return head->next; pLinkedList fast = head; pLinkedList slow = head; pLinkedList pre = NULL; /* head 1 2 3 4 5 pre slow fast */ //1個節點 if (head->next->next == NULL) return head->next; while (fast->next != NULL && fast->next->next != NULL) { pre = slow; fast = fast->next->next; slow = slow->next; } //此時fast已到終點,slow為中間節點,pre為中間節點前一個節點 pre->next = slow->next; free(slow); slow = NULL; return head;}
希望本文所述對大家C++程序設計有所幫助。
新聞熱點
疑難解答
圖片精選