ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法总结

2022-08-15 23:02:16  阅读:184  来源: 互联网

标签:总结 Node ListNode cur val next 链表 算法


今天放两道刚刷的关于链表的题

package com.chenghaixiang.jianzhi2.day09;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office027 {
}
//给定一个链表的 头节点 head ,请判断其是否为回文链表。
//
//如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。
class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
//最简单方法是使用一个额外的可以访问下标的数据结构,然后复制比对
class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> temp=new ArrayList<>();

        ListNode cur=head;
        while (cur!=null){
            temp.add(cur.val);
            cur=cur.next;
        }

        int zhizhen1=0;
        int zhizhen2=temp.size()-1;
        while (zhizhen1<zhizhen2){
            if(!temp.get(zhizhen1).equals(temp.get(zhizhen2))){
                return false;
            }
            zhizhen1++;
            zhizhen2--;
        }
        return true;
    }
}
View Code
package com.chenghaixiang.jianzhi2.day09;

/**
 * @author 程海翔
 * @school 石家庄铁道大学
 */
public class Office028 {
}
class Node {
    public int val;
    public Node prev;
    public Node next;
    public Node child;
}
//多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。
//
//给定位于列表第一级的头节点,请扁平化列表,即将这样的多级双向链表展平成普通的双向链表,使所有结点出现在单级双链表中。
class Solution01 {
    public Node flatten(Node head) {
        dfs(head);
        return head;
    }
    Node dfs(Node node){
        Node cur=node;
        //// 记录链表的最后一个节点
        Node last=null;

        while (cur!=null){
            Node next=cur.next;
            //  如果有子节点,那么首先处理子节点
            if(cur.child!=null){
                Node childlast=dfs(cur.child);
                next=cur.next;

                //  将 node 与 child 相连
                cur.next=cur.child;
                cur.child.prev=cur;
                //  如果 next 不为空,就将 last 与 next 相连
                if(next!=null){
                    childlast.next=next;
                    next.prev=childlast;
                }
                // 将 child 置为空
                cur.child=null;
                last=childlast;
            }else {
                last=cur;
            }
            cur=cur.next;
        }
        return last;
    }
}
View Code

 

标签:总结,Node,ListNode,cur,val,next,链表,算法
来源: https://www.cnblogs.com/chenghaixiang/p/16589964.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有