删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)java
来源:互联网 发布:局域网斗地主软件 编辑:程序博客网 时间:2024/04/30 23:02
public class DeleteMiddleLinkInList {
/**
* @param args删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new List();
int[] array={1,2,3,4,5,6};
list.setLen(array.length);
list.setArray(array);
list.InsertLast(array);
list.displaylist();
list.delete(array.length);
list.displaylist();
}
}
class List{
Link first;
Link last;
int len;
int[] array;
public void setLen(int len) {
this.len = len;
}
public void setArray(int[] array) {
this.array = array;
}
public List(){
first=null;
last=null;
}
public boolean isEmpty(){
return first==null;
}
public void InsertLast(int[] array){
for(int i=0;i<array.length;i++){
Link newlink=new Link(array[i]);
if(isEmpty()){
first=newlink;
}else{
last.next=newlink;
}
last=newlink;
}
}
public Link delete(int len){
Link current=first;
Link previous=first;
if(len%2==0){
int i=1;
while(i!=len/2){
i++;
if(current.next==null){
return null;
}else{
previous=current;
current=current.next;
}
}
previous.next=current.next;
return current;
}else{
int i=1;
while(i!=(len/2+1)){
i++;
if(current.next==null){
return null;
}else{
previous=current;
current=current.next;
}
}
previous.next=current.next;
return current;
}
}
public void displaylist(){
Link current=first;
while(current!=null){
current.displaylink();
current=current.next;
}
}
}
/**
* @param args删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new List();
int[] array={1,2,3,4,5,6};
list.setLen(array.length);
list.setArray(array);
list.InsertLast(array);
list.displaylist();
list.delete(array.length);
list.displaylist();
}
}
class List{
Link first;
Link last;
int len;
int[] array;
public void setLen(int len) {
this.len = len;
}
public void setArray(int[] array) {
this.array = array;
}
public List(){
first=null;
last=null;
}
public boolean isEmpty(){
return first==null;
}
public void InsertLast(int[] array){
for(int i=0;i<array.length;i++){
Link newlink=new Link(array[i]);
if(isEmpty()){
first=newlink;
}else{
last.next=newlink;
}
last=newlink;
}
}
public Link delete(int len){
Link current=first;
Link previous=first;
if(len%2==0){
int i=1;
while(i!=len/2){
i++;
if(current.next==null){
return null;
}else{
previous=current;
current=current.next;
}
}
previous.next=current.next;
return current;
}else{
int i=1;
while(i!=(len/2+1)){
i++;
if(current.next==null){
return null;
}else{
previous=current;
current=current.next;
}
}
previous.next=current.next;
return current;
}
}
public void displaylist(){
Link current=first;
while(current!=null){
current.displaylink();
current=current.next;
}
}
}
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)java
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)
- 循环右移,要求时间复杂度为O(n)且尽可能的少使用辅助空间
- 带表头的循环单项链表
- 找到一个单项链表中,距离最后一个元素为k的那个元素
- 单项链表的定位,插入,删除
- 单项链表的删除指定节点
- 找到单项链表中间那个元素,如果有两个则取前面一个
- 找到单项链表中间那个元素,如果有两个则取前面一个
- 找到单项链表中间那个元素,如果有两个则取前面一个
- 【java】单项链表的实现
- Java 版本的单项链表插入
- 将数组中的元素去重,并保持数组元素原顺序输出 要求时间复杂度尽可能的小
- 【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间
- 单项链表的创建读取和整表删除
- 1429 删除中间的元素
- 设计函数,实现删除向量中重复元素的功能。要求:尽可能避免数据的大量移动
- 单项链表的创建,打印,以及中间节点指向问题
- ZOJ 2630 Plane Partition(轮廓线 状态压缩DP)
- 这是一段代码
- JDK源代码分析——Thread
- Java初学(七)——J2SE之面向对象编程6(数组)
- 树莓派Raspberry Pi上手报告
- 删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)java
- C专家编程--指针与数组(二) 数组 指针 联系
- JS之浏览器对象含义
- 【五子棋AI】AI的基本结构——招法生成器
- 【leetcode】Binary Tree Inorder Traversal
- liunx 下配置mysql的问题
- project euler problem 12
- C专家编程--指针和数组(三) 值传递 指针传递 引用传递
- JS之函数定义的三种方式