判斷單鏈表是否有環:
這裡也是用到兩個指標,如果乙個鍊錶有環,那麼用乙個指標去遍歷,是永遠走不到頭的。
因此,我們用兩個指標去遍歷:first指標每次走一步,second指標每次走兩步,如果first指標和second指標相遇,說明有環。時間複雜度為o (n)。 方法
//方法:檢測單鏈表是否有環
public
boolean
hascycle(node head)
node first =head;
node second =head;
while (second != null
) }
return
false
; }
完整版**:(包含測試部分)
publicclass
linklistcycle
else
}//方法過載:向鍊錶中新增結點
public
void
add(node node)
if (head == null
) else
}//方法:遍歷鍊錶(列印輸出鍊錶。方法的引數表示從節點node開始進行遍歷
public
void
print(node node)
current =node;
while (current != null
) }
class
node
public
intgetdata()
public
void setdata(int
data)
public
node getnext()
public
void
setnext(node next)
}//方法:檢測單鏈表是否有環
public
boolean
hascycle(node head)
node first =head;
node second =head;
while (second != null
) }
return
false
; }
public
static
void
main(string args)
listcycle.add(listcycle.head);
//將頭結點新增到鍊錶當中,於是,單鏈表就有環了。
system.out.println(listcycle.hascycle(listcycle.head));
}}
判斷單鏈表是否有環
1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...
判斷單鏈表是否有環
鍊錶結構 struct list 1 判斷單鏈表是否有環 採用追趕法,設定兩個指標p和q,從煉表表頭開始,p每一步走兩個節點,q每一步走乙個節點,如果鍊錶有環則p和q必相遇。如下 判斷鍊錶是否有環,時間複雜度o n 空間複雜度o 1 list hasloopinlist list head else...
判斷單鏈表是否有環
1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進一步,fast每次前進二步,如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。當然,fas...