• leetcode链表--11、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,Given1->4->3->2->5->2and x = 3,
    return1->2->2->4->3->5
     
    解题思路:.本题目是将小于x的放在左侧,大于等于x的放在后面,且相对顺序不变
    1)定义两个链表   p存小于x的  q存大于等于x的
    2)存完后q->next =  NULL
    3)p1->next = qhead->next;
     1 #include <iostream>
     2 #include <malloc.h>
     3 using namespace std;
     4 struct ListNode {
     5     int val;
     6     ListNode *next;
     7     ListNode(int x) : val(x), next(NULL) {}
     8 };
     9 class Solution {
    10 public:
    11     //定义两个链表  1个存小于x的  一个存大于等于x的
    12     //连接两个链表
    13     ListNode *partition(ListNode *head, int x) {
    14         ListNode *phead = new ListNode(0);
    15         ListNode *qhead = new ListNode(0);
    16         ListNode *p = phead;
    17         ListNode *q = qhead;
    18         while(head != NULL)
    19         {
    20             if(head->val < x)
    21             {
    22                 p->next = head;
    23                 p = p->next;
    24             }
    25             else
    26             {
    27                 q->next = head;
    28                 q = q->next;
    29             }
    30             head = head->next;
    31         }
    32         q->next = NULL;//别忘记给q之后的链表断开,否则无限循环
    33         p->next = qhead->next;
    34         return phead->next;
    35     }
    36 };
    37 ListNode *CreateList(int n)
    38 {
    39     ListNode *head;
    40     ListNode *p,*pre;
    41     int i;
    42     head=(ListNode *)malloc(sizeof(ListNode));
    43     head->next=NULL;
    44     pre=head;
    45     for(i=1;i<=n;i++)
    46     {
    47         p=(ListNode *)malloc(sizeof(ListNode));
    48         cin>>p->val;
    49         pre->next=p;
    50         pre=p;
    51     }
    52     p->next=NULL;
    53 
    54     return head->next;
    55 }
    56 /*-------------------------输出链表-----------------------------------*/
    57 void PrintList(ListNode *h)
    58 {
    59     ListNode *p;
    60 
    61     p=h;//不带空的头结点
    62     while(p)
    63     {
    64         cout<<p->val<<" ";
    65         p=p->next;
    66         cout<<endl;
    67     }
    68 }
    69 int main()
    70 {
    71     int n1;
    72     int x;
    73     ListNode *h1;
    74     cout<<"输入链表1的结点数目"<<endl;
    75     cin>>n1;
    76     h1 = CreateList(n1);
    77     cout<<"链表1为:"<<endl;
    78     PrintList(h1);
    79     cout<<"输入x"<<endl;
    80     cin>>x;
    81     Solution s;
    82     h1 = s.partition(h1,x);
    83     cout<<"分区后链表1为:"<<endl;
    84     PrintList(h1);
    85     return 0;
    86 }

  • 相关阅读:
    poj 1262 地板覆盖问题
    混合图 (Standard IO)
    matrix
    麻将 (Standard IO)
    C#多线程编程之:异步事件调用
    使用线程池与专用线程
    C#多线程编程之:Timer(定时器)使用示例
    C#多线程编程之:异步方法调用
    WCF 快速入门
    c#实现每隔一段时间执行代码(多线程)
  • 原文地址:https://www.cnblogs.com/qqky/p/6866374.html
Copyright © 2020-2023  润新知