遍歷一次刪除倒數第k個節點
阿新 • • 發佈:2018-12-16
如果遍歷兩遍連結串列,很容易就能想到方法,先遍歷一邊求出連結串列長度n,遍歷第二遍時遍歷到n-k位置刪除n-k+1個節點
現在是遍歷一遍過程也很簡單
1.宣告兩個指標p、q,分別指向連結串列頭結點,讓p遍歷到第k個節點處
2.若p還沒到k處就指向空,則連結串列長度不夠,返回head
2p、q同時開始遍歷連結串列直到p遍歷到連結串列最後一個節點,這是q到達n-k個節點處,刪除到q的下一個節點即可
程式碼:
Node * deleteN(Node * head, int n) { if (head == NULL || n <= 0) return head; Node * pNode = head->next; for (int i = 0; i < n; i++) { if (pNode->next != NULL) pNode = pNode->next; else return head; } Node * qNode = head->next; while (pNode->next)//到達要刪除節點的前一個節點 { pNode = pNode->next; qNode = qNode->next; } Node * temp = qNode->next; qNode->next = qNode->next->next; delete temp; return head; }
執行結果: