要求自建链表,把数组转换成链表,然后对链表进行操作。
建立一个栈,一个指针p从头往后移动,指针q从栈中取出Node插入到p和p.next之间,pq相遇即停止,相遇有两种情况,一种是p==q,一种是p.next==q;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class Main {
static class LinkNode {
int val;
LinkNode next;
public LinkNode(int val){
this.val = val;
}
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int[] ints = Arrays.stream(scanner.nextLine().split(","))
.parallel().mapToInt(Integer::parseInt).toArray();
Stack<LinkNode> stack = new Stack<>();
LinkNode head = new LinkNode(0);
LinkNode p = head;
//链表初始化并放入stack中
for(int i = 0; i < ints.length; i++){
p.next = new LinkNode(ints[i]);
p = p.next;
stack.add(p);
}
head = head.next;
//开始链表转换
p = head;
LinkNode q = stack.peek();
while ((!p.equals(q)) && (!p.next.equals(q))) {
q = stack.pop();
q.next = p.next;
p.next = q;
p = p.next.next;
q = stack.peek();
}
q.next = null;
//打印
while (head != null) {
if(head.next == null){
System.out.print(head.val);
}else{
System.out.print(head.val + ",");
}
head = head.next;
}
}
} 
京公网安备 11010502036488号