2020-09-17

2020/09/17

链表的相关操作(创建链表,头插和尾插法),链表的排序(以及时间空间复杂度)

创建链表:(该链表不存在头节点)需要将数第一位数值赋给head
尾插法:

//尾插法
public static ListNode createTail(int num[]){
    ListNode head = null;
    if(num.length < 0)
        return  null;
    else {
        head= new ListNode(num[0]);
        ListNode tailnode = head;
        for (int i = 1; i < num.length; i++) {
            ListNode temp = new ListNode(num[i]);
            tailnode.next = temp;
            tailnode = tailnode.next;
        }
    }
    return  head;
}

头插法有两种实现,一种是将数组从后往前遍历,使用尾插法即可

//头插法
public static ListNode createPre(int num[]){
    ListNode head = null;
    if(num.length < 0)
        return  null;
    else {
        head= new ListNode(num[num.length-1]);
        ListNode tailnode = head;
        for (int i = num.length-2; i >=0; i--) {
            ListNode temp = new ListNode(num[i]);
            tailnode.next = temp;
            tailnode = tailnode.next;
        }
    }
    return  head;
}

一种是单独使用头插法

//头插法
public  static  ListNode createPrea(int num[]){
    ListNode head = null;
    if(num.length < 0)
        return  null;
    else {
        head = new ListNode(num[0]);
        for (int i = 1 ;i < num.length; i++) {
            ListNode temp = new ListNode(num[i]);
            temp.next = head.next;
            head.next = temp;
        }
    }
    return  head;
}

链表排序:
一般不修改指针,只修改数值:
每一轮找到最小值,进行交换,选择排序了

//链表排序,不可以使用多余的链表和数组空间
public  static  void sort(ListNode head){
    if(head == null) return ;
    while (head != null){
        int min = head.val;
        ListNode temp = head.next;
        ListNode temp1 = null;
        while (temp != null){
            if(min > temp.val) {
                min = temp.val;
                temp1 = temp;
            }
            temp = temp.next;
        }
        //交换节点head和最小值
        if(temp1 != null)
            swap(head,temp1);//交换值即可
        head = head.next;
    }
    return ;
}
public  static  void swap(ListNode head,ListNode temp){
    int min = temp.val;
    temp.val = head.val;
    head.val = min;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值