值x将链表划分为两部分,小于x的结点排在大于或等于x 的结点之前

编写代码,以给定值x为基准将链表分割为两部分,所有小于x的结点将排在大于或等于x的结点之前。

/*传入链表的首结点,以及作为链表分割基准的值*/

#include<iostream>

using namespace std;

typedef struct node

{

int data;

struct node* next;

}* LinkedListNode;

LinkedListNode partition(LinkedListNode node, int x)

{

LinkedListNode beforeStart = NULL;

LinkedListNode beforend = NULL;

LinkedListNode afterStart = NULL;

LinkedListNode afterEnd = NULL;

/*分割链表*/

while (node != NULL)

{

LinkedListNode next = node->next;

node->next = NULL;

if (node->data < x)

{

/*将结点插入before链表*/

if (beforeStart == NULL)

{

beforeStart = node;

beforend = beforeStart;

}

else

{

beforend->next = node;

beforend = node;

}

}

else

{

/*将结点插入after链表*/

if (afterStart = NULL)

{

afterStart = node;

afterEnd = afterStart;

}

else

{

afterEnd->next = node;

afterEnd = node;

}

}

node = next;

}//end while

if (beforeStart == NULL)

return afterStart;

//合并before和after链表

beforend->next = afterStart;

return beforeStart;

}

/*传入链表的首结点,以及作为链表分割基准的值*/

#include<iostream>

using namespace std;

typedef struct node

{

int data;

struct node* next;

}*LinkedListNode;

LinkedListNode partition(LinkedListNode node, int x)

{

LinkedListNode beforeStart = NULL;

LinkedListNode afterStart = NULL;

/*分割链表*/

while (node != NULL)

{

LinkedListNode next = node->next;

node->next = NULL;

if (node->data < x)

{

/*将结点插入before链表的前端*/

node->next=beforeStart;

beforeStart = node;

}

else

{

/*将结点插入after链表*/

node->next=afterStart;

afterStart=node;

}

node = next;

}//end while

if (beforeStart == NULL)

return afterStart;

//合并before和after链表

while (beforeStart->next != NULL)

{

beforeStart = beforeStart->next;

}

beforeStart->next = afterStart;

return beforeStart;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 07:21:28

值x将链表划分为两部分,小于x的结点排在大于或等于x 的结点之前的相关文章

[LeetCode]89. Partition List链表划分

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of the nodes in each of the two partitions. For example,Given 1->4->3->2

lintcode 容易题:Partition List 链表划分

题目: 链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null 解题: 上面返回的结果好多不对的应该是: 1->2->2->3->4->5->null 想了好久不知道怎么搞,九章看到的程序,竟然搞

【链表】合并两个排序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode Merge(ListNode list1,ListNode list2) {

LintCode 96. 链表划分

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null 解:很简单,主要逻辑在while循环部分. /** * Definition of ListNode * class ListNode { * public: * int val; *

【剑指Offer】【链表】合并两个排序的链表

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. A:若链表1为空,则合并后的链表头结点为pHead2:若链表2为空,则合并后的链表头结点为pHead1   创建ret_Head作为合并链表的新头结点,比较pHead1和pHead2,ret_Head指向小的数,ret_Head->next指向两个链表中下一个最小的数 ====> 递归 A:同样的,递归也是一种栈结构,所以也可以用栈来解决这个问题 /* struct ListNode { int

Leetcode算法系列(链表)之两数相加

Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和.您可以假设除了数字 0 之外,这两个数都不会以 0 开头.示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 链接:https://le

将单链表翻转的两种方法

将一个单链表翻转的描述很简单,例如: 输入: NODE1->NODE2->NODE3->NODE4->NODE5->NULL 输出: NODE5->NODE4->NODE3->NODE2->NODE1->NULL 那么,定义单链表如下: (为简单起见,将data字段定义为int, 当然实际应用中data很可能是一个复杂的结构体) typedef struct list_s { int data; struct list_s *next; } li

27、输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路:同归并算法 本题: 1 public class Solution { 2 public ListNode Merge(ListNode list1, ListNode list2) { 3 ListNode head; 4 if (list1 == null) { 5 return list2; 6 } 7 if (list2 == null) { 8 return list1; 9 } 10

链表表示的两数相加

给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表.你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 代码一: 1 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 2 ListNode res