鍊錶 檢測是否有環

2021-06-13 16:27:45 字數 905 閱讀 5295

typedef struct node

node,*lnode;

單鏈表

bool isloop(lnode ln)

return true;

}

檢測兩個鍊錶是否相交

一種方法:首尾相交,如果有環則相交;否則不相交。

node *  gettailnode(lnode ln)

{     if(null==ln)

return null;

node* p = ln;

while(p->next)

p = p->next;

return p;

連線另乙個鍊錶 p->next = ln2;

判斷是否有環

bool flag = isloop(ln1);

另外一種:統計節點個數

int  countnode(lnode ln)

int count=0;

node *p = ln;

while(p)

count++;

p = p->next;

return count;

3、刪除節點,給出其中任意節點p將其刪除

方法:」偷天換日「

void  deletenode(node *p)

if(null==p)

return ;

if(p->next)

node* q = p->next;

p->data = q->data;

p->next = q->next;

delete q;

q = null;

else

delete p;

p = null;

4、在節點前插入乙個節點,方法與第三題類似

如何判斷鍊錶是否有環 鍊錶是否有環的判斷

對於鍊錶是否存在環,有三個問題需要考慮 1.是否有環 2.入環節點 3.環的長度 第一種方法快慢指標法,也稱之為龜兔演算法,設定兩個指標,慢指標和快指標。最開始均指向鍊錶的頭節點,之後,快指標每次後移兩個節點,慢指標每次後移乙個節點。1.如果快指標指向空,則鍊錶無環 2.若快指標和慢指標再次指向乙個...

鍊錶是否相交,鍊錶是否有環問題

1 乙個單鏈表,判斷是否有環,環的入口節點 分析 兩個指標,慢指標一次走一步,快指標一次走兩步,如果有環肯定會相交 listnode pnode bool i istloop listnode head return false 找出環的入口 環入口到相遇點為x,從開始到環入口點長度為a,環長為r,...

判斷鍊錶是否有環

1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...