鍊錶雙指標的應用

2022-07-02 10:30:11 字數 928 閱讀 6690

在乙個煉表裡使用兩個指標,可以實現一些操作

如尋找鍊錶中倒數第k個結點,尋找中間位置結點,判斷鍊錶有沒有環,以及如何找到環的入口

#include #includetypedef struct node

node;

typedef node* pnode;

int countnum;

void createnode(pnode* list)//建立乙個鍊錶,且賦值從0開始

//尋找倒數第k個結點,第乙個指標先走k步,然後第二個再走,第乙個走到終點第二個指標就指向倒數第k個

int last_but_k(pnode hnode,int k)

while (hnode)

return p->data;

}//同理乙個走一步,乙個走兩步

int middle(pnode hnode)

return hnode->data;

}//鍊錶裡面可能有環結構,利用雙指標可以判斷鍊錶裡面是否有環,同時可以找到環的入口

//判斷有沒有環,乙個指標走一步,乙個指標走兩步,如果第乙個指標到達尾部則說明沒有環,如果兩個指標相遇則說明有環,且有環必相遇

int if_circle(pnode hnode)

}//如果有環,找到環的入口,採取的方法又是乙個指標走一步,另乙個指標走兩步,當兩個指標相遇的時候

//p2比p1多走一圈,令p2再回到起點與p1都是一步一步地走,相遇處就是入口

//起點到入口的距離和相遇點到入口的距離相等

pnode find_entrance(pnode hnode)

while (p1 != p2);

p1 = hnode;

while (p1 != p2)

return p1;

}int main()

}

分隔鍊錶 雙指標操作

給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。輸入示例 head 1 4 3 2 5 2,x 3 輸出示例 1 2 2 4 3 5 c 結構體 definition for singly linke...

雙指標解決陣列鍊錶問題

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。輸入 nums 1,2,3,4 輸出 1,3,2,4 注 3,1,2,4 也是正確的答案之一。0 nums.length 50000 1 nums i 10000 一 雙指標,取餘 1...

專題 鍊錶雙指標問題(快慢指標 相遇指標)

雙指標 分別指向兩個鍊錶,每個鍊錶各自乙個指標 快慢指標 指向同乙個鍊錶,一前一後,前進速度不同 相遇指標 指向同乙個有環鏈表,一前一後,前進速度不同 面試題22.鍊錶中倒數第k個節點 definition for singly linked list.public class listnode c...