java
public class Solution {
public static void main(String[] args){
ListNode ls = new ListNode();
ls.addNode(10);
ls.addNode(20);
ls.addNode(30);
ls.printLN();
System.out.println("After reverse..");
ls.reverse();
ls.printLN();
}
}
class Node{
int val;
Node next;
static int count = 0;
public Node(int data){
this.val = data;
next = null;
}
}
class ListNode{
Node head = new Node(0); // headNode-no val
public void addNode(int data){
Node temp = head;
Node newNode = new Node(data);
while(temp.next != null){
temp = temp.next;
}
temp.next = newNode;
Node.count++;
System.out.println("already have nodes " + Node.count);
}
public void reverse(){
Node current = this.head.next;
Node nextNode = null;
int count = 1; // 不需要创建一个新的链表以实现头插法,记录第一个头插的节点,并使其next域指向null
while(current != null){
System.out.println(current.val);
nextNode = current.next;
current.next = head.next;
head.next = current;
if(count ==1 ){ // 第一个头插法的节点需要将指针域置为null
current.next = null;
}
count++;
current = nextNode;
}
}
public void printLN(){
Node temp = this.head.next;
while(temp != null){
System.out.println(temp.val);
temp = temp.next;
}
}
}