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到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...