链表划分
来源:互联网 发布:java手游飞机 编辑:程序博客网 时间:2024/06/06 07:38
链表划分
问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 如给定链表 1->4->3->2->5->2->NULL,并且 x=3 返回 1->2->2->4->3->5->NULL。
解题思路:创建两个新链表,分别设为1,2;遍历给定链表,比较每个结点与给定值X值的大小,若比X小,则放入新链表1中,否则放入新链表2中。遍历完毕后,将新链表1 的最后一个结点指向新链表2的第一个结点,来达到将两个链表串起来从来实现划分链表的目的。
实现代码:
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param x: an integer
* @return: a ListNode
*/
ListNode *partition(ListNode *head, int x) {
// write your code here
if(head==NULL) return NULL;
ListNode *leftdummy=new ListNode(0);
ListNode *rightdummy=new ListNode(0);
ListNode *left=leftdummy;
ListNode *right=rightdummy;
while(head!=NULL){
if(head->val<x){
left->next=head;
left=head;
}
else {
right->next=head;
right=head;
}
head=head->next;
}
right->next=NULL;
left->next=rightdummy->next;
return leftdummy->next;
}
};
public:
/**
* @param head: The first node of linked list.
* @param x: an integer
* @return: a ListNode
*/
ListNode *partition(ListNode *head, int x) {
// write your code here
if(head==NULL) return NULL;
ListNode *leftdummy=new ListNode(0);
ListNode *rightdummy=new ListNode(0);
ListNode *left=leftdummy;
ListNode *right=rightdummy;
while(head!=NULL){
if(head->val<x){
left->next=head;
left=head;
}
else {
right->next=head;
right=head;
}
head=head->next;
}
right->next=NULL;
left->next=rightdummy->next;
return leftdummy->next;
}
};
A题感悟:这道题是老师上课时讲过的一道题,当时看到这道题时,我觉得这道题在一个链表中不好操作,但是也没有想到要用两个链表。老师讲思路的时候,才知道原来链表还可以这样进行链接,感觉自己对链表有了新的认识和理解。真正在敲这个代码的时候,再次理解了老师那句“要脑洞大开”的话。
0 0
- 链表划分
- 链表划分
- 题目:链表划分
- LintCode-链表划分
- 链表划分
- 链表划分
- LintCode:链表划分
- 链表的划分
- 链表:链表划分
- 链表划分
- 链表划分
- Lintcode 链表划分
- 链表划分
- LintCode 链表划分
- 链表划分-LintCode
- 链表划分
- 链表划分
- 链表划分
- 图像处理--知识点整理
- MQ消息中间件技术
- 高性能网站架构之缓存篇—Redis集群搭建
- 冒泡排序自我经典解析
- 轻松搞定JavaScript预解析
- 链表划分
- QT5.3.2编译程序出错: GL/gl.h: No such file or directory
- 207. Course Schedule
- 数学期望(360)
- vi快捷键使用大全
- URL 统一资源定位符
- Serilizable/Externalizable/transient
- Xshell拖拽文件到linux(rz和sz命令用法详解)
- GO 内存分配new和make的区别