Ref
typedef struct list{
int item;
struct list* next;
}myList
单链表反转
myList* invList(myList* head){
if(head == null) return null;
myList* prev = null, * next = null;
while(head){
next = head->next;
head->next = prev;
prev = head;
heady = next;
}
return head;
}
链表中环的检测
int hasCycle(myList* head){
myList* fast = head;
myList* low = head;
while(fast != NULL && fast->next != NULL){
low = low->next;
fast = fast->next->next;
if (low == fast){
return 1;
}
}
return 0;
}
两个有序的链表合并
myList* mergeList(myList* li1, myList* li2){
myList head = {0};
myList* pRes = &head;
while(1){
if(li1 == NULL){
pRes->next = li2;
}
if (li2 == NULL){
pRes->next = li1;
}
if(li1->item < li2->item){
pRes->next = li1;
li1 = li1->next;
}else{
pRes->next = li2;
li2 = li2->next;
}
pRes = pRes->next;
}
return head;
}
删除链表倒数第n个结点
myList* removeNthFromEnd(myList* head,int n){
myList* fast = head;
myList* prev = NULL;
myList* next = head;
int k = n;
while((k > 1) && (fast != NULL)){
fast = fast->next;
k--;
}
if (fast == NULL){
return head;
}
while (fast->next != NULL){
fast = fast->next;
prev = next;
next = next->next;
}
if(prev == NULL){
head = head->next;
}else{
prev->next = prev->next->next;
}
return head;
}
求链表的中间结点
myList* middleNode(myList* head)
{
myList* fast = head;
myList* low = head;
while(fast != NULL && fast->next != NULL)
{
low = low->next;
fast = fast->next->next;
}
return low;
}