使用插入法排序链表
注意:一定要保持链表的完整性,否则容易丢数据
package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func main() {
a1 := new(ListNode)
a1.Val = 1
a2 := new(ListNode)
a2.Val = 2
a3 := new(ListNode)
a3.Val = 3
a1.Next = a2
a2.Next = a3
ret := sortList(a1)
for ret != nil {
fmt.Println(ret.Val)
ret = ret.Next
//break
}
}
/**
*
* @param head ListNode类
* @return ListNode类
*/
func sortList(head *ListNode) *ListNode {
// write code here
if head == nil || head.Next == nil {
return head
}
newHead := &ListNode{
Val: 0,
Next: head,
}
lastNode := head
node1 := head.Next
for node1 != nil {
node2 := newHead
tmp := node1.Next
lastTmp := node1
for node2.Next != node1 {
//从大到小
if node1.Val > node2.Next.Val {
node1.Next = node2.Next
node2.Next = node1
lastNode.Next = tmp
lastTmp = lastNode
break
}
//从小到大
if node1.Val < node2.Next.Val {
node1.Next = node2.Next
node2.Next = node1
lastNode.Next = tmp
lastTmp = lastNode
break
}
node2 = node2.Next
}
node1 = tmp
lastNode = lastTmp
}
return newHead.Next
}