| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | package main/* type ListNode struct {	Val  int	Next *ListNode} *//* func list2str(head *ListNode) string {	curr := head	str := make([]rune, 0)	for curr != nil {		str = append(str, rune(curr.Val+'0'))		curr = curr.Next	}	return string(str)} *//** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */// before -> curr -> curr.Next -> afterfunc swapPairsOld(head *ListNode) *ListNode {	if head == nil || head.Next == nil {		return head	}	// initialize before, curr, after	before := &ListNode{0, head}	curr := head	after := curr.Next.Next	// swap node	before.Next = curr.Next	curr.Next.Next = curr	curr.Next = after	// head of result	res := before.Next	for after != nil && after.Next != nil {		// move ptr		before = curr		curr = after		after = after.Next.Next		// swap node		before.Next = curr.Next		curr.Next.Next = curr		curr.Next = after	}	return res}func swapPairs(head *ListNode) *ListNode {	dummy := ListNode{0, head}	curr := &dummy	for curr.Next != nil && curr.Next.Next != nil {		first, second := curr.Next, curr.Next.Next		// swap node		first.Next = second.Next		second.Next = first		curr.Next = second		// move forward		curr = curr.Next.Next	}	return dummy.Next}/* func main() {	l15 := ListNode{5, nil}	l14 := ListNode{4, &l15}	l13 := ListNode{3, &l14}	l12 := ListNode{2, &l13}	l1 := &ListNode{1, &l12}	fmt.Println(list2str(swapPairs(l1)))	l22 := ListNode{2, nil}	l2 := &ListNode{1, &l22}	fmt.Println(list2str(swapPairs(l2)))	l33 := ListNode{3, nil}	l32 := ListNode{2, &l33}	l3 := &ListNode{1, &l32}	fmt.Println(list2str(swapPairs(l3)))	fmt.Println(list2str(swapPairs(&ListNode{1, nil})))} */
 |