反转链表
题目描述:输入一个链表,反转链表后,输出链表的所有元素。
思路:遍历链表时通过头插法来插入链表结点。
步骤:
1 如果链表为空,返回null。
2 当前首结点设为尾结点。
3 遍历链表,通过头插法把当前链表结点插入到当前首结点的前面。
4 返回反转链表后的首结点。
时间复杂度:O(n)。
Java代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
// 反转链表
public ListNode ReverseList(ListNode head) {
// 如果链表为空,返回null
if (head == null) {
return null;
}
// cur表示当前链表结点
ListNode cur = head.next;
// 当前首结点设为尾结点
head.next = null;
// 遍历链表
while (cur != null) {
// 获取当前链表结点的后继结点
ListNode next = cur.next;
// 当前首结点设为当前链表结点的后继结点
cur.next = head;
// 当前链表结点设为当前首结点
head = cur;
// 当前链表结点的旧后继结点设为当前链表结点
cur = next;
}
// 返回反转链表后的首结点
return head;
}
}
浙公网安备 33010602011771号