golang链表反转如何实现

avatar
作者
筋斗云
阅读量:0

要实现golang链表的反转,可以采用迭代的方式或者递归的方式。

迭代方式的代码如下:

type ListNode struct {     Val  int     Next *ListNode }  func reverseList(head *ListNode) *ListNode {     var prev *ListNode // 上一个节点     curr := head       // 当前遍历的节点      for curr != nil {         next := curr.Next // 保存下一个节点         curr.Next = prev  // 将当前节点的Next指向上一个节点         prev = curr       // 更新上一个节点为当前节点         curr = next       // 更新当前节点为下一个节点     }      return prev // 返回反转后的头节点 } 

递归方式的代码如下:

type ListNode struct {     Val  int     Next *ListNode }  func reverseList(head *ListNode) *ListNode {     if head == nil || head.Next == nil {         return head     }     newHead := reverseList(head.Next) // 先反转后面的链表     head.Next.Next = head             // 将当前节点的下一个节点的Next指向当前节点,实现反转     head.Next = nil                   // 将当前节点的Next置为nil,防止形成环     return newHead                    // 返回新的头节点 } 

以上代码实现了golang链表的反转,分别采用了迭代和递归两种方式。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!