分割链表@Nowcoder —— 单链表

简介: 分割链表

@TOC

1. 题目

题目链接:分割链表
在这里插入图片描述

2. 思路及小注意点

这道题目的经典思路,就是创建两个新链表lessHeadmoreHead,各自尾插再链接即可。
在这里插入图片描述

小注意点

  • [ ] 这道题目的经典错误,就是greaterHead这条链表经历了一系列尾插之后,尾巴没置空。由于还可能与原链表中其后节点相连,实际上成环了。这点我注意到了。

在这里插入图片描述

  • [ ] 但也拦不了我这个智障晕的乎的把lessTailgreaterTail给成pHead

3. 题解

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        if(pHead == NULL)
            return NULL;
        struct ListNode* lessHead,*lessTail;
        lessHead = lessTail = (ListNode*)malloc(sizeof(ListNode));
        
        struct ListNode* greaterHead,*greaterTail;
        greaterHead = greaterTail = (ListNode*)malloc(sizeof(ListNode));
       
        struct ListNode* cur = pHead;
        while(cur)
        {
            if(cur->val < x)
            {
                lessTail->next = cur;
                lessTail = cur;
            }
            else
            {
                greaterTail->next = cur;
                greaterTail = cur;
            }
            cur = cur->next;
        }
        lessTail->next = greaterHead->next;
        greaterTail->next = NULL;
        struct ListNode* ret = lessHead->next;
        free(lessHead);
        free(greaterHead);
        return ret;
    }
};

4. 反思

最朴素的思路无非是,为了保证数据顺序不变,创建一个新头结点,遍历链表把小的尾插(要找尾),同时不断缝合原链表(要记录prevnext),并且要找的到原链表的头,最后链接过来,一顿操作猛如虎,发现我是二百五。这种做法相当麻烦,最后还是回归了经典解法,创建两条新链表。

:star: After all this time?
:black_heart: Always.

持续更新~@边通书

相关文章
|
2月前
|
存储 缓存 算法
链表全景:探索单链表、双向链表与循环链表【实战演练】
链表全景:探索单链表、双向链表与循环链表【实战演练】
37 3
|
2月前
|
存储
【单链表】数据结构单链表的实现
【单链表】数据结构单链表的实现
|
17天前
|
存储
链表入门(单链表讲)
链表入门(单链表讲)
链表入门(单链表讲)
|
5天前
|
存储
【海贼王的数据航海】链表—单链表
【海贼王的数据航海】链表—单链表
8 0
|
2月前
|
存储 编译器
单链表与双链表实现
单链表与双链表实现
27 4
|
2月前
特殊链表(循环单链表,循环双链表,静态链表)
特殊链表(循环单链表,循环双链表,静态链表)
23 3
|
25天前
|
算法
数据结构和算法学习记录——线性表之单链表(下)-头插函数、尾删函数、头删函数、查找函数、pos位置插入&删除数据、单链表销毁
数据结构和算法学习记录——线性表之单链表(下)-头插函数、尾删函数、头删函数、查找函数、pos位置插入&删除数据、单链表销毁
22 0
|
25天前
|
存储 算法
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
16 0
|
2月前
|
Java
DAY-1 | Java数据结构之链表:删除无头单链表中等于给定值 val 的所有节点
力扣203题解:使用时间复杂度为O(n)的思路删除链表中所有值为key的元素。引入辅助指针pre,记录cur的前一个节点,遍历链表时,若cur.val!=key,pre和cur同时前进;若cur.val==key,则pre.next=cur.next,cur继续前进,确保pre不急于跟随以处理连续相同值的情况。遍历结束后,处理头节点可能需要删除的特殊情况。
30 0
|
2月前
牛客—CM11 链表分割
牛客—CM11 链表分割