Blog.

反转链表

Cover Image for 反转链表
Bernie
Bernie

206. 反转链表

leetcode 链接

思路:

1.定义一个 pre 节点,一个 current 节点指向 head

2.使用 current 节点循环遍历链表,每次循环将 先将 current.next 节点缓存起来为 temp, 然后将 current.next 节点指向 pre, 然后将 pre 指向当前节点 current,最后将 current 指向缓存的 temp 节点。

typescript 解法

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function reverseList(head: ListNode | null): ListNode | null {
  let pre: ListNode = null;
  let current: ListNode = head;
  while (current != null) {
    const temp: ListNode | null = current.next;
    current.next = pre;
    pre = current;
    current = temp;
  }
  return pre;
}

go 解法

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseList(head *ListNode) *ListNode {
    var pre *ListNode
    current := head
    for current != nil {
        temp := current.Next
        current.Next = pre
        pre = current
        current = temp
    }
    return pre
}