反转链表(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)。
如果你有更好的思路欢迎在评论区留言,欢迎点赞转发,感谢阅读。
}
头结点也已经声明好了:
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)。
如果你有更好的思路欢迎在评论区留言,欢迎点赞转发,感谢阅读。
相关文章推荐
- Java中单链表的实现和单链表的反转(倒置)
- 反转链表的Java实现
- java实现链表反转
- Java实现反转单链表
- JAVA实现链表的反转(《剑指offer》)
- java-实现链表反转-递归和非递归实现
- 不依赖堆栈的链表反转——java实现
- java实现单链表反转(递归方式)
- Java实现的单链表反转方法(1)
- 反转链表 - java和rust的不同实现
- (整理)Java实现链表----链表的反转
- 单链表的反转java实现
- java实现链表反转
- 用java实现反转链表
- 链表、反转链表操作,Java实现
- java实现链表反转
- 反转链表_Java实现
- java 实现反转链表
- java 使用头插法实现反转链表
- 【LeetCode-面试算法经典-Java实现】【025-Reverse Nodes in k-Group(单链表中k个结点一组进行反转)】