Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客:<但凡.
我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》
欢迎点赞,关注!
1、题目
2、题解
我们先分析一下思路。他让小于x的在前,大于x的在后,并且保持相对顺序不变,那咱们就新建两个链表,然后遍历原链表,把小于x的放一个链表,大于x的节点放一个链表,最后把两个链表穿起来就好了。
需要注意的是,咱们得自己给节点初始化。给节点分配内存后别忘了把他的next置空。不然访问->next时后报错。还有一个需要注意的是,我们开辟地址应该是malloc(sizeof(struct ListNode))。我们开辟的空间应该是struct ListNode的大小,只不过是接受的时候用指针接受的,千万不要写成malloc(sizeof(struct ListNode*))!!!
另外还有一些需要注意的点我标注在代码里了:
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* s1=(struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* s2=(struct ListNode*)malloc(sizeof(struct ListNode));//开辟地址//注意我们应该用指针接受动态开辟的地址s1->next = NULL;s2->next = NULL;struct ListNode* s11 = s1;struct ListNode* s22 = s2;while(head){if((head->val)<x){s1->next = head;s1=head;}else{s2->next=head;s2=head;}head=head->next;}s1->next=s22->next;s2->next=NULL;//注意如果不加这一条,那么这个代码可能就没有尾了,导致死循环return s11->next;
}
好了,今天的内容就分享到这,我们下期再见!