描述
实现反转单向链表和双向链表的函数。
如 1->2->3 反转后变成 3->2->1。
示例
输入:
3
1 2 3
4
1 2 3 4
输出:
3 2 1
4 3 2 1
解题思路:(单向链表)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String[] n1=in.nextLine().split(" ");
String[] num1=in.nextLine().split(" ");
String[] n2=in.nextLine().split(" ");
String[] num2=in.nextLine().split(" ");
Node node=transForNode(num1);
DoubleNode dnode=transForDoubleNode(num2);
node=reverseList01(node);
dnode=reverseList02(dnode);
show01(node);
show02(dnode);
}
//打印链表
public static void show01(Node head){
while(head!=null){
System.out.print(head.value+" ");
head=head.next;
}
System.out.println();
}
public static void show02(DoubleNode head){
while(head!=null){
System.out.print(head.value+" ");
head=head.next;
}
System.out.println();
}
//数组转链表
public static Node transForNode(String[] nums) {
Node head = new Node(Integer.parseInt(nums[0]));
Node cur = head;
for(int i = 1; i < nums.length; i++) {
cur.next = new Node(Integer.parseInt(nums[i]));
cur = cur.next;
}
return head;
}
//数组转双向链表
public static DoubleNode transForDoubleNode(String[] nums) {
DoubleNode head = new DoubleNode(Integer.parseInt(nums[0]));
DoubleNode cur = head;
for(int i = 1; i < nums.length; i++) {
DoubleNode nextDoubleNode = new DoubleNode(Integer.parseInt(nums[i]));
cur.next=nextDoubleNode;
nextDoubleNode.last=cur;
cur = cur.next;
}
return head;
}
public static Node reverseList01(Node head){
Node pre=null;
Node next=null;
while(head!=null){
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}
public static DoubleNode reverseList02(DoubleNode head){
DoubleNode pre=null;
DoubleNode next=null;
while(head!=null){
next=head.next;
head.next=pre;
head.last=next;
pre=head;
head=next;
}
return pre;
}
}
class Node{
public int value;
public Node next;
public Node(int value){
this.value=value;
}
}
class DoubleNode{
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int value){
this.value=value;
}
}