//快慢指针
bool hasCycle(struct ListNode *head) {
//if(head==NULL||head->next==NULL)return 0;
struct ListNode * fast=head;
struct ListNode * slow=head;
while(fast!=NULL&&fast->next!=NULL){
slow=slow->next;
fast=fast->next->next;
if(slow==fast)
return 1;
}
return 0;
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode* list=(struct ListNode*)malloc(sizeof(struct ListNode));//链表头结点,顺序表需要×空间长度
list->next=NULL;
struct ListNode* L;//创建一个中间结点
L=list;
while(list1!=NULL&&list2!=NULL){
struct ListNode* s=(struct ListNode*)malloc(sizeof(struct ListNode));
s->next=NULL;
if(list1->val>=list2->val){
s->val=list2->val;
list2=list2->next;
L->next=s;
}
else{
s->val=list1->val;
list1=list1->next;
L->next=s;
}
L=s;
}
while(list2!=NULL){
struct ListNode* s=(struct ListNode*)malloc(sizeof(struct ListNode));//不能在最前面定义
s->next=NULL;
s->val=list2->val;
L->next=s;
list2=list2->next;
L=s;
}
while(list1!=NULL){
struct ListNode* s=(struct ListNode*)malloc(sizeof(struct ListNode));
s->next=NULL;
s->val=list1->val;
L->next=s;
list1=list1->next;
L=s;
}
L->next=NULL;
return list->next;
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
//尾插法建立一张表,将不等的赋值在新表中
/*
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* newlist=malloc(sizeof(struct ListNode));
newlist->next=NULL;
struct ListNode* zj=newlist;
while(head){
struct ListNode* s=malloc(sizeof(struct ListNode));
s->next=NULL;
if(head->val!=val){
s->val=head->val;
zj->next=s;
zj=s;
}
head=head->next;//不论相等不相等都要后移只不过如果不相等会在上面的if进行赋值
}
return newlist->next;
}
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* loc = malloc(sizeof(struct ListNode));
loc->next=head;
struct ListNode* zj=loc;
while(zj->next!=NULL){
if(zj->next->val==val)
zj->next=zj->next->next;//如果相等跳过这个数
else
zj=zj->next;//如果不相等不改变zj的值
}
return loc->next;
}