/**
* 反转单链表
*/
public class ReverseListNode {
/**
* 反转单链表,方法一使用的是链表的头插法
* @param head 传入的单链表
* @return 单链表的头
*/
public static ListNode reverseList01(ListNode head){
ListNode temp = head;
ListNode newList = null;
//保留结果链表头结点
ListNode result = null;
ListNode currentNode = null;
while(temp != null){
currentNode = temp;
temp = temp.next;
if(newList == null){
newList = currentNode;
currentNode.next = null;
}else{
currentNode.next = newList;
newList = currentNode;
result = newList;
}
}
return result;
}
/**
* 反转单链表,方法二使用的也是链表的头插法,简化代码
* @param head 传入的单链表
* @return 单链表的头
*/
public static ListNode reverseList02(ListNode head){
ListNode node = null;
ListNode temp = null;
while(head != null){
temp = head.next;
head.next = node;
node = head;
head = temp;
}
return node;
}
public static void main(String[] args){
ListNode head = new ListNode(1);
ListNode node1 = new ListNode(8);
ListNode node2 = new ListNode(9);
ListNode node3 = new ListNode(4);
ListNode node4 = new ListNode(5);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
ListNode node = reverseList01(head);
// ListNode node = reverseList02(head);
while(node != null){
System.out.println(node.val);
node = node.next;
}
}
}
//单链表的类
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}