题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
分析
反转链表,一遍循环,为了让2指向1,又不丢失下一个节点,就要让2的下一个节点先取出来存为temp,然后在把2节点指向前一个节点pre。此时将下一个节点temp取出,赋值给当前节点,让其继续前进。而pre节点则要存储为当前节点。这样下一轮的时候,就可以继续赋值了。最后走到头的时候,节点也就反转过来了。
解法
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
cur := head
var pre *ListNode
for cur != nil {
var temp = cur.Next
// 将当前节点指向前一个节点
cur.Next = pre
pre = cur
cur = temp
}
return pre
}