最近在学习链表,上课时老师出了一道单向链表的逆置,我的思路如下:
1.从键盘输入将要输入的数据个数,作为数组的长度。
2.构造数组,将数据存在数组里。
3.构造新链表,将数组里的元素按顺序以尾插法存在链表里。
4.构造一个新的头结点headS,将步骤3中链表的结点(从头结点后的结点开始)按顺序一个一个删除,接到headS后面,用头插法。
import java.util.Scanner;
//结点类
class LNode{
int data;
LNode next;
}
//链表类
class MyList{
LNode head;
LNode tail;
LNode headS;
//创建链表
void createList(int[] a){
head=new LNode();
tail=head;
LNode ptr;
int i=0;
ptr=head.next;//将头结点的指向ptr
while (i<a.length){
ptr=new LNode();//给ptr分配空间
tail.next=ptr;//将尾结点的指向ptr
ptr.data=a[i];
//tail=ptr;
ptr.next=null;//ptr指向空
tail=ptr;
i++;
}
}
void nixu(){
LNode ptr;
LNode newNode;
ptr=head.next;
headS=new LNode();
while (ptr!=null){
newNode=ptr;将ptr赋给新节点n ewNode
head.next=ptr.next;//删除ptr
ptr=head.next;
newNode.next=headS.next;//将新节点插入到headS之后
headS.next=newNode;
}
}
void printList(){
LNode ptr=headS.next;
while (ptr!=null){
System.out.print(" "+ptr.data);
ptr=ptr.next;
}
}
}
public class Nizhi {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入数据的个数:");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
int[] a=new int[n];
int i=0;
System.out.println("请输入数据:");
while (i<n){
a[i]=reader.nextInt();
i++;
}
MyList mylist=new MyList();
mylist.createList(a);
//mylist.printList();
mylist.nixu();
System.out.println("输出逆转后的结果:");
mylist.printList();
}
}