博客主页:🏆看看是李XX还是李歘歘 🏆
🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺
💗点关注不迷路,总有一些📖知识点📖是你想要的💗
⛽️今天的内容是 Leetcode 206. 反转链表 ⛽️💻💻💻
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
头结点插入法:
新建链表,遍历一次链表,每次在新的链表头部插入元素
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
// 原地反转-头插法
var result *ListNode
var temp *ListNode
for head != nil {
temp = head.Next
head.Next = result
result = head
head = temp
}
return result
}
新建链表,和上一段不同的是,上一段是在原来的结点基础上链接起来的,而下面的代码是新建结点
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
// 新建节点-头插法
var res *ListNode
for head!=nil {
res = &ListNode{Val:head.Val,Next:res}
head=head.Next
}
return res
}
先将链表遍历,存起来,之后建立新的链表:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
result := &ListNode{}
arr := make([]*ListNode,0)
for head != nil {
arr = append(arr,head)
head = head.Next
}
temp := result
for i:=len(arr)-1;i>=0;i--{
arr[i].Next = nil
temp.Next = arr[i]
temp = temp.Next
}
return result.Next
}