目录
前言:
兄弟们,继续开干啊,刷题才是永远的王道!!!!!!
一、链表面试题
1.链表分割
问题描述:
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点
排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
问题分析:
假设我们有一链表:
假设给定一个值X,小于X的节点就排在其余节点的之前,且不能改变原来的数据结构,也就说假设给定X=10,那么就是12,3,5,23,56按照这样的顺序排列,不能改变原来的数据结构顺序。
问题解决:
首先,我们可以把小于X的部分和大于X的部分 看成两个链表,分别定义两个节点,bs、be和as、ae,都指向null。在定义一个cur变量等于head,看图:
然后我们让cur头字节开始往后遍历这个链表,当cur为null就遍历完了。
第一步:比较12与15的大小,因为小于15,所以放在bs,be这段链表中,第一次bs,be都是指向12这个字节,
第二步:
cur继续向后走,因为3又小于15,所以放在bs,be这段链表中,这个时候让be.next = cur,be = be.next。看图:
第三步:cur继续向后走ÿ