import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * @描述: 反转单向链表 * @思路: 涉及三个节点, preNode、currode、nextNode * 1.声明preNode nextNode; * 2.反转preNode、currNode顺序 * 3.移动指针,更新preNode、currNode * @复杂度:时间O(N) * @链接:https://www.nowcoder.com/practice/b66a251dec8847f386bbe6cd96b7e9c8?tpId=101&tqId=33175&tPage=1&rp=1&ru=/ta/programmer-code-interview-guide&qru=/ta/programmer-code-interview-guide/question-ranking */ public class Main { public static void main(String[] args) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(input.readLine()); String[] strings1 = input.readLine().split(" "); Node head1 = Node.createNodeList(strings1); head1 = ReverseList.reverseList(head1); int m = Integer.parseInt(input.readLine()); String[] strings2 = input.readLine().split(" "); DoubleNode head2 = DoubleNode.createNodeList(strings2); head2 = ReverseList.reverseDoubleList(head2); Node.printNodeList(head1); DoubleNode.printNodeList1(head2); } } class ReverseList { public static Node reverseList(Node head) { Node node = head; Node pre = null; //初始化preNode Node next = null; while (node != null) { next = node.getNext(); //初始化nextNode //反转顺序 node.setNext(pre); //移动 pre = node; //pre 当前节点 node = next; } return pre; } public static DoubleNode reverseDoubleList(DoubleNode head) { DoubleNode node = head; DoubleNode pre = null; //初始化preDoubleNode DoubleNode next = null; while (node != null) { next = node.getNext(); //初始化nextDoubleNode //反转顺序 node.setNext(pre); node.setLast(next); //移动 pre = node; //pre 当前节点 node = next; } return pre; } } class Node { private Node next; private int value; public Node(int value) { this.value = value; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public static Node createNodeList(Integer[] values) { Node head = new Node((values[0])); Node node = head; for (int i = 1; i < values.length; i++) { Node newNode = new Node(values[i]); node.next = newNode; node = newNode; } return head; } public static Node createNodeList(String[] values) { Node head = new Node(Integer.parseInt(values[0])); Node node = head; for (int i = 1; i < values.length; i++) { Node newNode = new Node(Integer.parseInt(values[i])); node.next = newNode; node = newNode; } return head; } public static void printNodeList(Node head) { StringBuilder sb = new StringBuilder(); while (head != null) { sb.append(head.getValue()).append(" "); head = head.getNext(); } System.out.println(sb.toString()); } } class DoubleNode { private DoubleNode last; private DoubleNode next; private int value; public DoubleNode(int value) { this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public DoubleNode getNext() { return next; } public void setNext(DoubleNode next) { this.next = next; } public DoubleNode getLast() { return last; } public void setLast(DoubleNode last) { this.last = last; } public static DoubleNode createNodeList(String[] values) { DoubleNode head = new DoubleNode(Integer.parseInt(values[0])); DoubleNode node = head; DoubleNode pre = null; for (int i = 1; i < values.length; i++) { DoubleNode newNode = new DoubleNode(Integer.parseInt(values[i])); node.next = newNode; node.last = pre; pre = node; node = newNode; } return head; } public static DoubleNode createNodeList(Integer[] values) { DoubleNode head = new DoubleNode((values[0])); DoubleNode node = head; DoubleNode pre = null; for (int i = 1; i < values.length; i++) { DoubleNode newNode = new DoubleNode(values[i]); node.next = newNode; node.last = pre; pre = node; node = newNode; } return head; } public static void printNodeList1(DoubleNode head) { StringBuilder sb = new StringBuilder(); while (head != null) { sb.append(head.getValue()).append(" "); head = head.getNext(); } System.out.println(sb.toString()); } public static void printNodeList2(DoubleNode last) { StringBuilder sb = new StringBuilder(); while (last != null) { sb.append(last.getValue()).append(" "); last = last.getLast(); } System.out.println(sb.toString()); } }