PTA 带头节点的双向循环链表操作
程序员文章站
2022-03-16 08:50:07
...
题目要求:读入一系列整数,依次插入到双向循环链表的头部和尾部,然后顺序和逆序输出链表。
输入格式:
输入一行整数(空格分隔),以-1结束。
输出格式:
第一行输出链表顺序遍历的结果,第二行输出逆序遍历的结果。
输入样例:
在这里给出一组输入。例如:
1 2 3 4 5 6 -1
输出样例:
5 3 1 2 4 6
6 4 2 1 3 5
import java.util.Scanner;
// 链表节点
class Node{
int val;
Node pre;
Node next;
Node(int val, Node pre, Node next){
this.val = val;
this.pre = pre;
this.next = next;
}
}
public class Main {
// 头指针作为前置节点
public static Node head = new Node(0, null, null);
public static Node tail = head;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = 0, f = 0;
while((n = cin.nextInt()) != -1) {
if(f++ % 2 == 0) {
addFirst(n);
}else {
addLast(n);
}
}
showPre();
System.out.println();
showPost();
}
// 从头部插入
public static void addFirst(int n) {
Node old = head.next;
Node t = new Node(n, head, old);
head.next = t;
if(head == tail) {
tail = t;
}else {
old.pre = t;
}
}
// 插入尾巴节点
public static void addLast(int n) {
Node t = new Node(n, tail, null);
tail.next = t;
tail = t;
}
// 前序遍历
public static void showPre() {
Node t = head.next;
while(t != null) {
if(t.next == null)
System.out.print(t.val);
else
System.out.print(t.val + " ");
t = t.next;
}
}
// 倒序遍历
public static void showPost() {
Node t = tail;
while(t != head) {
if(t.pre == head)
System.out.print(t.val);
else
System.out.print(t.val + " ");
t = t.pre;
}
}
}
上一篇: Set使用hashCode与equals方法去重复原理
下一篇: 关于hashmap的散列程度分析