NOTE
两两交换链表中的节点
两两交换链表中的节点的 LeetCode 解题笔记。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2. 思路
3. 实现
3.1. 三指针
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
if head == nil || head.Next == nil { return head }
dummyHead := &ListNode{}
d := dummyHead
current := head
for current != nil {
var next *ListNode
d.Next,next = reverse(current, 2)
d = d.Next.Next
current = next
}
return dummyHead.Next
}
func reverse(head *ListNode, count int) (*ListNode, *ListNode) {
if head == nil || head.Next == nil {return head, nil}
var prev *ListNode
current := head
var next *ListNode
for i:=0;i < count;i++ {
next = current.Next
current.Next = prev
prev = current
current = next
}
return prev, current
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看