《零基础Go语言算法实战》【题目 4-9】给定链表的头部 head,判断链表是否为循环链表

《零基础Go语言算法实战》

【题目 4-9】给定链表的头部 head,判断链表是否为循环链表

如果链表中有某个节点可以通过不断跟随下一个指针再次到达,则链表中存在循环。如

果链表中有循环,则返回真,否则返回假。

【解答】

① 思路。

通过 Go 语言循环链表的判断规则实现即可。

② Go 语言实现。

package main

import "fmt"

// 定义双向链表

type ListNode struct {

 Prev *ListNode

 Data int

 Next *ListNode

}

func hasCycle(head *ListNode) bool {

 if head == nil || head.Next == nil {

 return false

 }

 p1, p2 := head, head.Next

 for p1 != p2 {

 if p2 == nil || p2.Next == nil {

 return false

 }

 p1 = p1.Next

 p2 = p2.Next.Next

 }

 return true

}

func main() {

 newNode := ListNode{nil, 1, nil}

 ret := hasCycle(&newNode)

 fmt.Println(ret)

}

//$ go run interview4-9.go 

//false

你可能感兴趣的:(算法,go语言,算法,go,web,web编程,程序员)