/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include <iostream>
#include <stdio.h>
using namespace std;
//* Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
int flag=1;
ListNode* p1=NULL;
ListNode* p2=NULL;
ListNode* p=NULL;
ListNode* temp=NULL;
ListNode* head1=NULL;
if(head->val>head->next->val)
{ p=head->next;
head->next=head->next->next;
p->next=head;
head=p; //保证头两个节点有序
}
head1=head->next; //p的前一个
for(p=head->next->next;p!=NULL;) //从第三个节点开始
{ temp=p;
for(p1=head;p1->next!=p;p1=p1->next)
{
if(p1->val<temp->val&&p1->next->val>=temp->val)
{
p2=p->next;
head1->next=p->next;
p->next=p1->next;
p1->next=p;
p=p2;
flag=0;
break;
}
else if(head->val>=temp->val)
{
p2=p->next;
head1->next=p->next;
p->next=head;
head=p;
p=p2;
flag=0;
break;
}
}
if(flag==1)
{
head1=head1->next;
p=p->next;
}
}
return head;
}
};
int main() {
Solution solution;
//int A[] = {2,4,7,9};
//int B[] = {5,6,4};
int i;
ListNode *head = NULL;
ListNode *head1 = (ListNode*)malloc(sizeof(ListNode));
ListNode *head2 = (ListNode*)malloc(sizeof(ListNode));
head1->next = NULL;
head2->next = NULL;
ListNode *node;
ListNode *pre = head1;
for(int i = 5;i >0;i--){
node = new ListNode(i);
// node->exp = A[i];
node->next = NULL;
pre->next = node;
pre = node;
}
/* pre = head2;
for(int i = 2;i < 5;i++){
node = new ListNode(i,i+1);
// node->val = B[i];
node->next = NULL;
pre->next = node;
pre = node;
}*/
head = solution.insertionSortList(head1->next);
while(head != NULL){
// printf("%d %d ",head->coef,head->exp);
cout<<head->val<<' ';
head = head->next;
}
//i=(head1->val);
//cout<<i;
return 0;
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include <iostream>
#include <stdio.h>
using namespace std;
//* Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
int flag=1;
ListNode* p1=NULL;
ListNode* p2=NULL;
ListNode* p=NULL;
ListNode* temp=NULL;
ListNode* head1=NULL;
if(head->val>head->next->val)
{ p=head->next;
head->next=head->next->next;
p->next=head;
head=p; //保证头两个节点有序
}
head1=head->next; //p的前一个
for(p=head->next->next;p!=NULL;) //从第三个节点开始
{ temp=p;
for(p1=head;p1->next!=p;p1=p1->next)
{
if(p1->val<temp->val&&p1->next->val>=temp->val)
{
p2=p->next;
head1->next=p->next;
p->next=p1->next;
p1->next=p;
p=p2;
flag=0;
break;
}
else if(head->val>=temp->val)
{
p2=p->next;
head1->next=p->next;
p->next=head;
head=p;
p=p2;
flag=0;
break;
}
}
if(flag==1)
{
head1=head1->next;
p=p->next;
}
}
return head;
}
};
int main() {
Solution solution;
//int A[] = {2,4,7,9};
//int B[] = {5,6,4};
int i;
ListNode *head = NULL;
ListNode *head1 = (ListNode*)malloc(sizeof(ListNode));
ListNode *head2 = (ListNode*)malloc(sizeof(ListNode));
head1->next = NULL;
head2->next = NULL;
ListNode *node;
ListNode *pre = head1;
for(int i = 5;i >0;i--){
node = new ListNode(i);
// node->exp = A[i];
node->next = NULL;
pre->next = node;
pre = node;
}
/* pre = head2;
for(int i = 2;i < 5;i++){
node = new ListNode(i,i+1);
// node->val = B[i];
node->next = NULL;
pre->next = node;
pre = node;
}*/
head = solution.insertionSortList(head1->next);
while(head != NULL){
// printf("%d %d ",head->coef,head->exp);
cout<<head->val<<' ';
head = head->next;
}
//i=(head1->val);
//cout<<i;
return 0;
}
花一天千辛万苦的编出来了结果说超时了。 不过对于链表排序, 首先要记住被删除节点的头结点和尾节点, 节点其实就是地址。 可以有两个节点的next为同一个节点