反转链表#
这是我写的算法可以用来参考,上边有测试用例可以用来检测代码写的对不对。
这个题目是leetcode上的206题,需要反转链表的顺序
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next; // 保存下一个节点
curr.next = prev; // 反转当前节点的指针
prev = curr; // 移动prev指针
curr = nextTemp; // 移动curr指针
}
return prev; // 新的头节点,即原链表的尾节点,由于当前curr为null,所以prev就是新的头节点
}
}反转链表的思想就是把每一个节点的下一个节点指向前一个节点,这样遍历到最后的时候得到的就是我们所需要的链表了。
复杂度分析#
这个算法的时间复杂度是O(n),空间复杂度是O(1)
通过邮件回复


