您的位置:首页 > 编程语言 > Java开发

反转链表(Java实现)

2018-03-28 13:24 423 查看
反转链表是最基础的数据结构练习题,主要是注意一下边界处理和指针方向,下面提供了两种常用思路。假定节点结构为:static class node{     Object value;     node next;     node(Object o){        this.value = o;     }
}
头结点也已经声明好了:
static node head;
思路1:头插法。public static void reserve1() {     if(head==null||head.next==null)           return;     node p = head.next,newHead = new node(head.value),tmp;     while(p!=null) {           tmp = new node(p.value);           tmp.next = newHead;           newHead = tmp;           p = p.next;     }     head = newHead;
}
头插法的时间复杂度和空间复杂度均为O(n)。
思路2:逆转指针。public static void reserve2() {     if(head==null||head.next==null)           return;     node p = head,p1 = p.next,p2 = p1.next;     while(p2!=null) {           p1.next = p;           p = p1;           p1 = p2;           p2 = p2.next;     }     p1.next = p;     head.next = null;     head = p1;}这里需要注意将之前的头结点的指针置为null,否则最后会形成一个环。逆转指针的方法空间复杂度仅为O(1)。
如果你有更好的思路欢迎在评论区留言,欢迎点赞转发,感谢阅读。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: