在乙個煉表裡使用兩個指標,可以實現一些操作
如尋找鍊錶中倒數第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...