精华内容
下载资源
问答
  • //构造一个空栈S S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base)//分配失败 { printf("分配内存失败.\n"); exit(0); } S->top=S->base; S->stacksize=STACK_INIT_SIZE; ...
  • 据说链表是面试是比较容易出现的数据结构。把leetcode上关于链表的题之前差不多刷完了。 AC不过的最主要原因就是考虑的情况不完全,尤其是头指针,以及最后一个元素,空指针等。...判断栈空的条件是s...

    据说链表是面试是比较容易出现的数据结构。把leetcode上关于链表的题之前差不多刷完了。

    AC不过的最主要原因就是考虑的情况不完全,尤其是头指针,以及最后一个元素,空指针等。

    面试题第五题:从尾到头打印链表

    第一想法是用栈。

    考虑到java中栈的定义为:

    Stack<ListNode> sk = new Stack<ListNode>();

    判断栈空的条件是sk.isEmpty()

    第二个是用递归

    每一次调用自身传进去的参数是当前值的next

    public static void reverseList(ListNode head) {
    		if (head == null && head.next == null) {
    			System.out.println(head.val);
    		} else {
    			if (head.next != null) {
    				reverseList(head.next);
    			}
    		}
    		System.out.println(head.val);
    
    	}
    

    面试题13,:在O(1)的时间删除链表结点

    核心想法是为了便于不记录要删除结点的上一个结点,把下一个节点的内容复制到需要删除的节点上覆盖原有的内容,相当于删除了指定结点。但是一定要注意如果头结点为指定结点,指定结点为最后一个节点的情况。

    因此,当删除一个节点时,并不一定要删除这个结点本身,可以把下一个节点的内容复制出来覆盖被删除结点的内容,然后再把下一个节点删除!

    下面代码只是将最核心的展示,并没有考虑头结点以及尾结点

    public static ListNode deleteNode(ListNode head, ListNode de){
    		ListNode newHead = head;
    		while(head.val!=de.val&&head.next!=null){
    			head = head.next;
    		}
    		head.val = head.next.val;
    		head = head.next;
    		return newHead;
    	}
    

    同样,编程之美3.4节中无头链表中删除指定结点

    函数的参数只是指明了要删除的结点current

    因此我们先要找到Current 的下一个节点,然后用current.next.val去覆盖当前的Current.val

    然后current = current.next.next

    不是很明白有头链表和无头链表的区别?

    另外在编程之美上还有一道题比较有意思就是判断两个链表是否相交

    比较好的方法有两个:

    一、将其中一个链表首尾相连,检测另外一个链表是否存在环,如果存在,则两个链表相交,而检测出来的依赖环入口即为相交的第一个点。

    二、如果两个链表相交,那个两个链表从相交点到链表结束都是相同的节点,我们可以先遍历一个链表,直到尾部,再遍历另外一个链表,如果也可以走到同样的结尾点,则两个链表相交。

    这时我们记下两个链表length,再遍历一次,长链表节点先出发前进(lengthMax-lengthMin)步,之后两个链表同时前进,每次一步,相遇的第一点即为两个链表相交的第一个点。

    Node* findCross(Node* head1,Node* head2)    
    {    
        if(head1==NULL||head2==NULL)    
            return NULL;    
        /*将第二个链表变成有环链表*/    
        Node* tail2=head2;    
        while(tail2->next!=NULL)    
            tail2=tail2->next;    
        tail2->next = head2;    
               
        Node* temp = findCircle(head1);    
        if(temp!=NULL)    
            return temp;    
        else    
            return NULL;    
                  
    }    
    

      

    bool isIntersect(pNode h1, pNode h2)
    {
     
        if(!h1 || !h2)
            return false;
         
        bool flag = false;
     
        pNode temp_h1 = h1;
        pNode temp_h2 = h2;
     
        //找到第一个链表的尾节点,将第二个链表挂在其后
        while(temp_h1->next != NULL)
            temp_h1 = temp_h1->next;
        temp_h1->next = h2;
     
        do 
        {
            temp_h2 = temp_h2->next;
        }while(temp_h2 && temp_h2 != h2);
     
        if(temp_h2 == h2)
            flag = true;
     
        //将链表恢复原样
        temp_h1->next = NULL;
         
        return flag;
    }
    

     剑指offer面试题15:链表中的倒数第K个结点

    今天先到底为止,看一会操作系统的事。

    明天继续,明天一天把所有链表的题看完。

    转载于:https://www.cnblogs.com/gracyandjohn/p/4547768.html

    展开全文
  • else//运算符为空则要进行优先级判断 { char temp1=oper.getTop();//取出栈顶符号 char temp2;//待入栈符号 if(equation[i]=='l'&&equation[i+1]=='o') temp2='l'; else if(equation...
  • 扩展:判断一个数值是不是2得整数次方,如果是话,这个数二进制数中有且只有一个1,那么这个数n会有 n&(n-1) == 0。或者求两个整数m和n需要改变m二进制中多少位才能得到n,可以先做 m^n 异或运算,然后...
  • 9. 若用数组S[0..m]作为两个栈S1和S2共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。这两个栈分配空间最佳方案是( )。 A.S1栈底位置0,S2栈底位置m B.S1栈底位置0,S2栈底...
  • 或者一个节点时候 判定回文GitHub地址​github.com解题:# 方法1# 使用 空间复杂度O(n)def is_palindrome_one(head):# 边界条件判断if not head or not head.next:return Truestack = []cur = headwhile ...

    背景

    编写一个函数,检查输入的链表是否是回文的。

    注意

    1 是单链表

    2. 空或者一个节点的时候 判定为回文GitHub地址​github.com

    解题:

    # 方法1

    # 使用栈 空间复杂度O(n)

    def is_palindrome_one(head):

    # 边界条件判断

    if not head or not head.next:

    return True

    stack = []

    cur = head

    while cur:

    stack.append(cur.val)

    cur = cur.next

    cur = head

    while stack:

    if cur.val != stack.pop():

    return False

    else:

    cur = cur.next

    return True

    class Solution:

    def isPalindrome(self, head: ListNode) -> bool:

    # 方法二 使用栈 O(N/2),快慢指针

    if not head or not head.next:

    return True

    dummy = ListNode(-1)

    dummy.next = head

    slow = fast = dummy

    stack = []

    while fast and fast.next:

    slow = slow.next

    stack.append(slow.val)

    fast = fast.next.next

    if not fast:

    stack.pop()

    cur = slow.next

    while stack:

    if cur.val != stack.pop():

    return False

    else:

    cur = cur.next

    return True

    # 反转链表及恢复

    def is_palindrome(self,head):

    if not head or not head.next:

    return True

    dummy = ListNode(-1)

    dummy.next = head

    slow = fast = dummy

    while fast and fast.next:

    slow = slow.next

    fast = fast.next.next

    # if not slow.next:

    # return True

    reverse_node = self.reverse(slow.next,slow)

    cur = head

    while reverse_node:

    if cur.val != reverse_node.val:

    return False

    else:

    cur = cur.next

    reverse_node = reverse_node.next

    new_node = self.reverse(slow.next)

    slow.next = new_node

    return True

    def reverse(self,node,pre=None):

    if not node:

    return node

    pre = None

    cur = node

    while cur:

    temp = cur.next

    cur.next = pre

    pre = cur

    cur = temp

    return pre

    # 递归的方法

    展开全文
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    设计一个构造函数,当对象结束时,要释放整个二叉搜索树所占内存空间(提示,通过后序遍历算法找到叶结点,并删除叶结点,不断重复此过程,直到整科树为空); 2、实现1所要求代码后,运行设计好代码,将...
  • 对于完全二叉树来说,叶子结点只可能在层次最大两层上出现:对于任何一个结点,若其右分支下子孙结点最大层次p,则其左分支下子孙结点最大层次或p,或p+1。 完全二叉树具有以下两个性质: 性质1:...
  • 每个 task 由一个确定 task 源提供。从不同 task 源而来 task 可能会放到不同 task 队列中。例如,浏览器可能单独鼠标键盘事件维护一个 task 队列,所有其他 task 都放到另一个 task 队列。通过...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    判断一个文件或目录是否存在 如何读写文件 7.Java多态实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码字符串转换ISO-8859-1编码字符串。 9.Java中访问数据库步骤,Statement和...
  • javascript入门笔记

    2018-05-15 15:01:07
    条件是一个boolean类型数据,如果条件结果true,则执行表达式1内容,并将表达式1结果作为整体表达式结果。如果条件false,则执行表达式2内容,并将表达式2结果作为整体表达式结果 ex: var age ...
  • 数据结构题

    2012-12-27 16:58:40
    24头指针f,尾指针r的循环队列判断空的条件是 (r+1)%max==f 。 三、问答题 1.已知一个6行5列的稀疏矩阵中非零元的值分别:9,41,6,8,-54,5和-8,它们在矩阵中的列号依次:1,4,5,1,2,4和5,其行值...
  • 《数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    5.评价一个算法,您是从哪几方面来考虑? 【大连海事大学 1996 二、3 (2分)】【中山大学 1998 三、1 (5分)】 6.解释和比较以下各组概念【华南师范大学 2000 一(10分)】 (1)抽象数据类型及数据...
  • 17.1.2 在同一个可执行文件或DLL多个实例间共享静态数据 17.1.3 Application Instances示例程序 17.2 映射到内存数据文件 17.2.1 方法1:一个文件,一块缓存 17.2.2 方法2:两个文件,一块缓存 17.2.3 方法3:...
  • Java SE 6.0编程指南 源码

    热门讨论 2012-05-18 13:40:45
    1.4 第一个Java程序 8 1.4.1 开发源代码 8 1.4.2 编译运行 9 1.5 小结 11 第2章 基本数据类型——构建Java 大厦基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档...
  • Java代码实例

    2016-06-21 22:44:51
    1.4 第一个Java程序 8 1.4.1 开发源代码 8 1.4.2 编译运行 9 1.5 小结 11 第2章 基本数据类型——构建Java 大厦基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档...
  • 29.选择排序思想是,将数据序列划分两个子列,一个子列是排好序,另一个是尚未排序。现若想将数据序列由小到大排序,则每次放到有序子列尾部位置元素,应从无序序列中选择( )。 A)最大 B)最小 C)任意...
  • 如题,自己参照网上例子做了一个C语言PL0编译器,能跑通,但是遇到调用procedure时候,就会一直循环无限调用,查错查了好久,还是没有找到,希望有大神能我解答一下!谢谢~ 代码如下,有点长。。 #include...
  •  ·分享c++程序错误查找技术,并介绍通用调试原则讨论每一个windows应用程序结构和基本元素  ·举例说明如何使用mfc开发本地windows应用程序  ·指导读者用c++和c++/cli设计和创建大量windows应用程序 ...
  •  ·分享c++程序错误查找技术,并介绍通用调试原则讨论每一个windows应用程序结构和基本元素  ·举例说明如何使用mfc开发本地windows应用程序  ·指导读者用c++和c++/cli设计和创建大量windows应用程序 ...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

判断一个栈s为空的条件是