题目
- 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
节点类
public class ListNode {
int val;
ListNode next;
public ListNode() {
}
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
思路:
- 链表翻转,就是遍历链表,拿到每一个节点,头插入
public class Solution {
public ListNode reverseList(ListNode head) {
//原链表指针,用于遍历
ListNode node = head;
//虚拟头节点tail
ListNode tail = new ListNode();
//遍历原链表
while(node != null){
//先保留原链表的next节点
ListNode temp = node.next;
//node节点为原链表当前节点,它先去指向新链表tail的next节点,再让新链表tail的next节点指向node
//其实就是头插入
node.next = tail.next;
tail.next = node;
//原链表的temp节点为新的node指针节点,继续遍历
node = temp;
}
return tail.next;
}
}