反转单链表
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
class ListNode1{
public int data;
public ListNode1 next;
public ListNode1(int data){
this.data=data;
this.next=null;
}
}
class MySingleList1{
public ListNode1 head;
public MySingleList1(){
this.head=null;
}
//1、头插法
public void addFirst(int data){
ListNode1 node=new ListNode1(data);
//若头结点为空
if(this.head==null){
this.head=node;
}else {
//若不为空,头节点为node的下一个节点,node为头结点
node.next=head;
this.head=node;
}
}
//2、反转链表
public ListNode1 reverseList(){
ListNode1 prev=null;
ListNode1 cur=this.head;
ListNode1 newHead=null;
while(cur != null){
ListNode1 curNext=cur.next;
if(curNext==null){
newHead=cur;
}
cur.next=prev;
prev=cur;
cur=curNext;
}
return newHead;
}
public void show(ListNode1 newHead){
if(newHead==null){
return;
}
ListNode1 cur=newHead;
while(cur != null){
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.println();
}
//打印单链表
public void show2(){
ListNode1 cur=this.head;
while(cur!=null){
System.out.print(cur.data+" ");
cur=cur.next;
}
System.out.println();
}
}
public class LinkList1 {
public static void main(String[] args) {
MySingleList1 mySingleList1=new MySingleList1();
mySingleList1.addFirst(2);
mySingleList1.addFirst(15);
mySingleList1.addFirst(7);
mySingleList1.addFirst(23);
mySingleList1.addFirst(9);
mySingleList1.show2();
ListNode1 newHead=mySingleList1.reverseList();
mySingleList1.show(newHead);
}
}