程序员代码面试指南第二版 15.反转单向链表

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


​welcome to my blog​

程序员代码面试指南第二版 15.反转单向链表_反转双向链表

题目描述

题目描述
实现反转单向链表和双向链表的函数。
如 1->2->3 反转后变成 3->2->1。

输入描述:
第一行一个整数 n,表示单链表的长度。

第二行 n 个整数 val 表示单链表的各个节点。

第三行一个整数 m,表示双链表的长度。

第四行 m 个整数 val 表示双链表的各个节点。

输出描述:
在给定的函数内返回相应链表的头指针。

示例1

输入
3
1 2 3
4
1 2 3 4

输出
3 2 1
4 3 2 1

第一次做, 空间复杂度O(1)的反转链表是基础, 务必掌握

import java.util.Scanner;

public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String[] s1 = sc.nextLine().split(" ");
int m = Integer.parseInt(sc.nextLine());
String[] s2 = sc.nextLine().split(" ");
ListNode head1 = new ListNode(Integer.parseInt(s1[0]));
ListNode curr1 = head1;
for(int i=1; i<n; i++){
curr1.next = new ListNode(Integer.parseInt(s1[i]));
//
curr1 = curr1.next;
}
curr1 = reverse1(head1);
while(curr1!=null){
System.out.print(curr1.val+" ");
//
curr1 = curr1.next;
}
System.out.println();

DoubleListNode head2 = new DoubleListNode(Integer.parseInt(s2[0]));
DoubleListNode curr2 = head2;
for(int i=1; i<m; i++){
curr2.next = new DoubleListNode(Integer.parseInt(s2[i]));
//
curr2 = curr2.next;
}
curr2 = reverse2(head2);
while(curr2!=null){
System.out.print(curr2.val+" ");
//
curr2 = curr2.next;
}
}
public static class ListNode{
int val;
ListNode next=null;
ListNode(int val){
this.val = val;
}
}
public static ListNode reverse1(ListNode head){
if(head==null)
return head;
ListNode left=null, curr=head, right;
while(curr!=null){
//save next node
right = curr.next;
//execute
curr.next = left;
//update
left = curr;
curr = right;
}
return left;
}
public static class DoubleListNode{
int val;
DoubleListNode next=null;
DoubleListNode last=null;
DoubleListNode(int val){
this.val = val;
}
}
public static DoubleListNode reverse2(DoubleListNode head){
if(head==null)
return head;
DoubleListNode left=null, curr=head, right;
while(curr!=null){
//save next node
right = curr.next;
//execute; 只处理当前节点的指针指向, 不用管别的节点的指针指向
curr.next = left;
curr.last = right;
//update
left = curr;
curr = right;
}
return left;
}
}


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“程序员代码面试指南第二版 15.反转单向链表” 的相关文章