/**
*
* ClassName:ReverseLinkedList
* @Description:输入一个链表,反转链表后,输出链表的所有元素。
* 思路如下:在遍历链表上的每个节点的时候,就修改其指针,当遍历到最后一个结点的时候,整个链表就反转完成了。
* 所以需要创建三个变量:一个是当前遍历的结点,一个是遍历结点的前一个结点,还有一个是当前遍历结点的下一个结点。
*
*/
public class ReverseLinkedList {
//链表的定义
public static class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}
public ListNode ReverseList(ListNode head){
//反转之后链表的头结点
ListNode reverseListHead=null;
//当期遍历的结点
ListNode curNode = head;
//遍历到的结点的前一个结点,该结点的作用让当前遍历到的指向前一个结点
ListNode preNode = null;
while(curNode != null){
//当前遍历到的结点的下一个结点
ListNode nextNode = curNode.next;
if(nextNode == null) reverseListHead = curNode;
curNode.next = preNode;
preNode = curNode;
curNode = nextNode;
}
return reverseListHead;
}
public static void main(String[] args){
ListNode head = new ListNode(1);
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
ListNode node4 = new ListNode(5);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
ListNode pHead = new ReverseLinkedList().ReverseList(head);
while(pHead != null){
System.out.println(pHead.val);
pHead = pHead.next;
}
}
}