题目要求:
如果链表的长度为N,要求时间复杂度为O(N),额外空间复杂度为O(1)
代码实现与分析:
package com.isea.brush;
/**
* 翻转单向链表?
* 要求:如果链表的长度为N,要求时间复杂度为O(N),额外空间复杂度为O(1)
* 解题思路:
* head: 表示当前链表的头结点
* pre: 表示头节点的前一个节点
* cur: 表示当前节点
* 操作:cur指向head的next;head的next指向pre;pre指向head;head指向cur;如此完成了一次循环。
*
*/
public class ReverseSingleList {
private class Node{
public int data;
public Node next;
public Node(){
}
public Node(int data){
this.data = data;
}
}
/**
* 翻转单向链表操作,返回值为翻转之后新链表的头结点
* @param head
* @return
*/
public Node reverseSingleList(Node head){
Node cur = null;
Node pre = null;
while(head != null){
cur = head.next;
head.next = pre;
pre = head;
head = cur; // 注意这里的写法是前后是接龙起来的。
}
return pre;
}
}