zoukankan      html  css  js  c++  java
  • 反转单链表基于Go

    给定一个单链表: 1->2->3->4->5,
    反转后输出为: 5->4->3->2->1

    • PrintNodeList输出头节点及后续节点
    • ReverseNodeList1是迭代的方式
    • ReverseNodeList2是递归的方式
    package main
    
    import (
    	"fmt"
    )
    
    type Node struct{
    	Value int
    	Next *Node
    }
    
    func PrintNodeList(head *Node){
    	fmt.Print("value:", head.Value, " ->")
    	for head.Next!=nil{
    		head = head.Next
    		fmt.Print("value:", head.Value, " ->")
    	}
    	fmt.Println()
    }
    
    func ReverseNodeList1(head *Node)*Node{
    	var next *Node = nil
    	var prev *Node = nil
    	var curr = head
    
    	for curr!=nil{
    		next = curr.Next
    		curr.Next = prev
    
    		prev = curr
    		curr = next
    	}
    	
    	return prev
    }
    
    func ReverseNodeList2(head *Node)*Node{
    	if head==nil || head.Next==nil{
    		return head
    	}
    
    	var newHead = ReverseNodeList2(head.Next)
    	head.Next.Next = head
    	head.Next = nil//避免成环
    	return newHead
    }
    
    func main(){
    	var node5 = Node{5, nil}
    	var node4 = Node{4, &node5}
    	var node3 = Node{3, &node4}
    	var node2 = Node{2, &node3}
    	var node1 = Node{1, &node2}
    	PrintNodeList(&node1)
    	//ReverseNodeList1(&node1)
    	PrintNodeList(ReverseNodeList1(&node1))
    	PrintNodeList(ReverseNodeList2(&node5))
    }
    
  • 相关阅读:
    Python爬虫-05:Ajax加载的动态页面内容
    Python爬虫-04:贴吧爬虫以及GET和POST的区别
    Python-爬虫03:urllib.request模块的使用
    Python Numpy-基础教程
    8皇后算法
    迷宫算法
    归并排序
    查找算法
    排序算法
    设计模式
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14627290.html
Copyright © 2011-2022 走看看