package main import ( "bufio" "fmt" "os" "strconv" ) type LinkNode struct { Val int Next *LinkNode } func main() { for { scanner := bufio.NewScanner(os.Stdin) // 设置大缓冲区,防止大输入时出错 buf := make([]byte, 1024*1024) // 1MB scanner.Buffer(buf, 1024*1024) scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔) // 读取第一行:n scanner.Scan() n, _ := strconv.Atoi(scanner.Text()) if n == 0 { break } scanner.Scan() k, _ := strconv.Atoi(scanner.Text()) if k == 0 { break } dummy := &LinkNode{} cur := dummy for i := 0; i < n; i++ { scanner.Scan() num, _ := strconv.Atoi(scanner.Text()) tmp := &LinkNode{Val: num} cur.Next = tmp cur = cur.Next } head := dummy.Next process(dummy, k) for head != nil { fmt.Printf("%d ", head.Val) head = head.Next } } } // 双指针解法,2个指针差k步,搞个dummy方便计算所在位置 func process(dummy *LinkNode, k int) { var pre *LinkNode nextk := dummy for k > 0 { nextk = nextk.Next k-- } for nextk != nil { pre = dummy dummy = dummy.Next nextk = nextk.Next } if dummy.Next != nil { pre.Next = dummy.Next dummy.Next = nil } else { pre.Next = nil } }