剑指offer 链表 java代码

18 删除链表的节点

class Solution {
    public ListNode deleteNode(ListNode head, int val) {
        //非空验证
        if(head==null){
            return null;
        }
        if(head.val==val){
            //如果要删除的是头指针,直接命令head指向下一个节点
            head=head.next;
            return head;
        }
        //既然删除的不是头指针,那么头指针不应该移动,定义一个辅助指针
        ListNode p = head;
        //判断辅助指针的下一个节点是否为空
        while(p.next!=null){
            if(p.next.val==val){
                p.next=p.next.next;
                return head;
            }
        p=p.next;
        }
        return head;
    }
}

21 调整数组顺序使奇数位位于偶数位前面

class Solution {
    public int[] exchange(int[] nums) {
        int r=0,l=nums.length-1,tmp;
        while(r<l){
            while(r<l&&(nums[r]&1)==1) r++;
            while(r<l&&(nums[l]&1)==0) l--;
            tmp=nums[r];
            nums[r]=nums[l];
            nums[l]=tmp;
        }
        return nums;
    }
}

22 链表中倒数第k个节点

class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode former =head,latter=head;
        for(int i=0;i<k;i++){
            former=former.next;
        }
        while(former!=null){
            former=former.next;
            latter=latter.next;
        }
        return latter;
    }
}

24 翻转链表

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur=head,pre=null;
        while(cur!=null){
            ListNode temp = cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }
}

25 合并两个排序链表

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2)     {
        ListNode dum=new ListNode(0),cur=dum;
        while(l1!=null&&l2!=null){
            if(l1.val<l2.val){
                cur.next=l1;
                l1=l1.next;
            }else{
                cur.next=l2;
                l2=l2.next;
            }
            cur=cur.next;
        }
        cur.next=l1!=null?l1:l2;
        return dum.next;
    }
}

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值