时间限制:30.000S 空间限制:128MB
题目描述
根据一个递增的整数序列构造有序单链表,删除其中的重复元素
输入描述
输入包括多组测试数据,每组测试数据占一行,第一个为大于等于0的整数n,表示该单链表的长度,后面跟着n个整数,表示链表的每一个元素。整数之间用空格隔开
输出描述
针对每组测试数据,输出包括两行,分别是删除前和删除后的链表元素,用空格隔开
如果链表为空,则只输出一行,list is empty
输入示例
5 1 2 3 4 5
5 1 1 2 2 3
0
输出示例
1 2 3 4 5
1 2 3 4 5
1 1 2 2 3
1 2 3
list is empty
答案
package main
import (
"bufio"
"os"
"fmt"
"strings"
"strconv"
)
var (
line []byte
err error
arr []string
n int
dummy *LinkedListNode
cur *LinkedListNode
)
func main() {
reader := bufio.NewReaderSize(os.Stdin, 1 << 20)
for {
line, _, err = reader.ReadLine()
if err != nil {
break
}
arr = strings.Fields(string(line))
n, _ = strconv.Atoi(arr[0])
if n == 0 {
fmt.Println("list is empty")
continue
}
arr = arr[1:n+1]
dummy = &LinkedListNode{}
cur = dummy
for _, str := range arr {
cur.Next = &LinkedListNode{ Val: str }
cur = cur.Next
}
printLinkedList(dummy.Next)
deleteSameVal(dummy.Next)
printLinkedList(dummy.Next)
}
}
type LinkedListNode struct {
Val string
Next *LinkedListNode
}
func printLinkedList(head *LinkedListNode) {
for head != nil && head.Next != nil {
fmt.Printf("%s ", head.Val)
head = head.Next
}
if head != nil {
fmt.Println(head.Val)
} else {
fmt.Println()
}
}
func deleteSameVal(head *LinkedListNode) {
for head != nil && head.Next != nil {
if head.Val == head.Next.Val {
head.Next = head.Next.Next
} else {
head = head.Next
}
}
}