Clear2 / Algorithm

算法训练
MIT License
0 stars 0 forks source link

链表反转 #5

Open Clear2 opened 4 years ago

Clear2 commented 4 years ago

双指针法实现反转

// 通过双指针,遍历head指针
func reverseList(head *ListNode) *ListNode {
    if head == nil  {
         return nil
    }
    var newHead *ListNode
    for head != nil {
        node := head.Next
        head.Next = newHead
        newHead = head
        head = node
    }
    return newHead
}
Clear2 commented 4 years ago

测试

func main() {
    node1 := new(ListNode)
    node1.Value = 1
    node2 := new(ListNode)
    node2.Value = 2
    node3 := new(ListNode)
    node3.Value = 3
    node4 := new(ListNode)
    node4.Value = 4
    node5 := new(ListNode)
    node5.Value = 5

    node1.Next = node2
    node2.Next = node3
    node3.Next = node4
    node4.Next = node5
    node5.Next = nil

    //PrintNode(node1)
    resN := reverseList(node1)
    PrintNode(resN)
}

func PrintNode(head * ListNode)  {
    for head != nil {
        fmt.Printf("->%d", head.Value)
        head = head.Next
    }
    fmt.Print("->", head)
}