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
}
}