//EquationTolist convert string to linkedlsit
func EquationToList(m string) *LinkedList.LinkedList {
	l := LinkedList.NewLinkedList()
	fmt.Println(m)
	sg := strings.Split(m, "+")
f:
	for _, v := range sg {
		var node [2]int
		var err error
		if !strings.Contains(v, "x") {
			node[0], _ = strconv.Atoi(v)
			node[1] = 0
			n := LinkedList.NewNode(node, nil)
			l.Insert(*n)
			continue f
		}
		tmp := strings.Split(v, "x")
		node[0], err = strconv.Atoi(tmp[0])
		if err != nil {
			node[0] = 1
		}
		if strings.Contains(tmp[1], "^") {
			node[1], _ = strconv.Atoi(string([]byte(tmp[1])[1:]))
		} else {
			node[1] = 1
		}
		n := LinkedList.NewNode(node, nil)
		l.Insert(*n)
	}
	return l
}
func PolyAdd(l1, l2 *LinkedList.LinkedList) *LinkedList.LinkedList {
	l := LinkedList.NewLinkedList()
	n1 := l1.Head
	n2 := l2.Head
	for n1 != nil || n2 != nil {
		if n1 != nil && (n2 == nil || getData(n1, 1) > getData(n2, 1)) {
			n := LinkedList.NewNode(n1.Data, nil)
			l.Insert(*n)
			n1 = n1.Next
		} else if n2 != nil && (n1 == nil || getData(n1, 1) < getData(n2, 1)) {
			n := LinkedList.NewNode(n2.Data, nil)
			l.Insert(*n)
			n2 = n2.Next
		} else if getData(n1, 1) == getData(n2, 1) {
			var tmp [2]int
			tmp[0] = getData(n1, 0) + getData(n2, 0)
			tmp[1] = getData(n2, 1)
			n := LinkedList.NewNode(tmp, nil)
			l.Insert(*n)
			n1 = n1.Next
			n2 = n2.Next
		}
	}
	return l
}
//MultOneTerm use the item from the first multinomial to mul the second multinomial
func MultOneTerm(n *LinkedList.Node, l *LinkedList.LinkedList) *LinkedList.LinkedList {
	var newn [2]int
	n0 := getData(n, 0)
	n1 := getData(n, 1)
	newl := LinkedList.NewLinkedList()
	ln := l.Head
	for ln != nil {
		ln0 := getData(ln, 0)
		ln1 := getData(ln, 1)
		newn[0] = n0 * ln0
		newn[1] = n1 + ln1
		newl.Insert(*LinkedList.NewNode(newn, nil))
		ln = ln.Next
	}
	return newl
}