- 两个有序的链表合并
- 删除链表倒数第n个结点
- 求链表的中间结点
// 两个有序的链表合并
// 输入:1->2->4, 1->3->4
// 输出:1->1->2->3->4->4
func (s *SingleLL)MergeTwoList(list1, list2 *Node) (res *Node) {
if list1 == nil && list2 != nil {
res = list2
return res
} else if list2 == nil && list1 != nil {
res = list1
return res
} else if list1 != nil && list2 != nil {
if list1.Data >= list2.Data {
res = list2
res.Next = s.MergeTwoList(list1, list2.Next)
} else {
res = list1
res.Next = s.MergeTwoList(list1.Next, list2)
}
}
return
}
// 删除链表倒数第n个结点, 第一个节点无法删除
func (s *SingleLL)DeleteListN(n int) {
if s.List == nil || n <= 0 {
return
}
fast := s.List
for i := 1; i <= n && fast != nil; i++ {
fast = fast.Next
}
if fast == nil {
return
}
slow := s.List
for (fast.Next != nil) {
fast = fast.Next
slow = slow.Next
}
slow.Next = slow.Next.Next
return
}
// 求链表的中间结点
func (s *SingleLL)GetMidNode() *Node {
fast := s.List
slow := s.List
for (fast != nil && fast.Next != nil && fast.Next.Next != nil) {
slow = slow.Next
fast = fast.Next.Next
}
return slow
}