zoukankan      html  css  js  c++  java
  • 链表删除中间结点-算法练习总结

    算法题目

    删除中间节点:

    实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。

    示例:

    输入:单向链表a->b->c->d->e->f中的节点c
    结果:不返回任何数据,但该链表变为a->b->d->e->f
    

    解题思路

    解法一:与后结点交换数值,然后删除后结点

    ​ 思路:由于只能访问当前结点,删除元素一般需要前置结点,所以可以把当前结点的值与后结点交换再删除后结点
    ​ 分析:时间复杂度是常数级,效率很快,不需要额外内存空间

    import com.test.day6_22.ListNode;
    
    /**
    
    @author cosefy
    
    @date 2020/6/23
    */
    public class DeleteMiddleNode {
    public static void main(String[] args) {
        int[] nums = {1, 3, 4, 5};
        ListNode head = getLinkedList(nums);
        test1(head.next);
    
    }
    
    public static ListNode getLinkedList(int[] nums) {
        ListNode head = new ListNode(nums[0]); //链表长度在1-100之间
        ListNode L = head;
        for (int i = 1; i < nums.length; i++) {
            ListNode node = new ListNode(nums[i]);
            L.next = node;
            L = L.next;
        }
        return head;
    }
    
    //解法一:与后结点交换数值,再删除后结点
    public static void test1(ListNode node) {
        ListNode next_node = node.next;
        //交换两个结点的值
        int temp = next_node.val;
        next_node.val = node.val;
        node.val = temp;
        //下面删除next_node
        node.next=next_node.next;
        //测试
        /*while(node!=null){
            System.out.println(node.val);
            node=node.next;
        }*/
    }
    }
    
  • 相关阅读:
    phpcs
    asp.net之cookie
    ajax技术
    union、except和intersect查询
    外连接查询
    对查询结果分组
    聚合函数查询
    数据库的约束
    数据库备份
    fusionCharts
  • 原文地址:https://www.cnblogs.com/cosefy/p/13182773.html
Copyright © 2011-2022 走看看