目录
一、题目解读
题目要求我们输入单链表长度和单链表各个节点的值及反转区间的左右端点,并且编写程序建立单链表及反转单链表
二、思路分析
找到开始反转的子链表头节点,然后开始常规的反转操作
反转前(添加一个pre头节点,方便修改head头节点)
反转后(添加一个pre头节点,方便修改head头节点)
三、代码
import java.util.Scanner;
//单链表
class Node {
public int val;
public Node next;
public Node(int val) {
this.val = val;
this.next = null;
}
}
public class Main {
//反转单链表
public static Node reversePartNode(Node head, int l, int r){
int i=0;
Node pre=new Node(0);
pre.next=head;
Node node=pre;
Node left=null;
Node leftPre=null;
Node right=null;
while (node!=null){
if (i+1==l){
leftPre=node;
left=node.next;
}
if (i==r){
right=node;
break;
}
i++;
node=node.next;
}
node=left;
Node curNext=node.next;
Node next=curNext.next;
left.next=right.next;
while (l!=r){
curNext.next=node;
node=curNext;
curNext=next;
if (next.next!=null)
next=next.next;
l++;
}
leftPre.next=right;
if (left==head)
pre.next=right;
return pre.next;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []arr=new int[n];
for (int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
int l=sc.nextInt();
int r=sc.nextInt();
Node head=new Node(arr[0]);
Node node=head;
//构建单链表
for (int i=1;i<n;i++){
Node cur=new Node(arr[i]);
node.next=cur;
node=node.next;
}
//反转单链表
head=reversePartNode(head,l,r);
node=head;
while (node.next!=null){
System.out.print(node.val+" ");
node=node.next;
}
System.out.print(node.val);
}
}