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 -> after
- func 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})))
- } */
|