题目
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
分析
代码
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
@Override
public String toString() {
return "ListNode1{" +
"val=" + val +
'}';
}
}
public class Solution {
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
ListNode listNode2 = new ListNode(2);
ListNode listNode3 = new ListNode(3);
ListNode listNode4 = new ListNode(4);
ListNode listNode5 = new ListNode(5);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
listNode4.next = listNode5;
ListNode head = ReverseList(listNode1);
printLinkedList(head);
}
/**
* 反转链表
* @param head
* @return
*/
public static ListNode ReverseList(ListNode head) {
ListNode cur = head;//用于记录当前接地那
ListNode pre = null;//用于记录当前节点的前一个节点
ListNode temp = null;//记录当前节点的后一个节点
while (cur != null){
temp = cur.next;//记录当前节点的下一个节点
cur.next = pre;//将当前节点的指针指向上一个节点
pre = cur;//当前节点准备后移 后移前标记后移后的前一个节点
cur = temp;//当前节点后移
}
return pre;
}
/**
* 打印链表
* @param head
*/
public static void printLinkedList(ListNode head){
while (head != null){
System.out.println(head);
head = head.next;
}
}
}