删除链表的倒数第N个节点
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode* sHead;
sHead=(struct ListNode*)malloc(sizeof(struct ListNode));
sHead->val=0;
sHead->next=head;
struct ListNode* slow=sHead;
struct ListNode* fast=head;
int i=n;
while( fast )
{
if(n)
{
fast=fast->next;
n--;
}
else
{
fast=fast->next;
slow=slow->next;
}
}
slow->next=slow->next->next;
return sHead->next;
}
链表相交
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA==NULL || headB==NULL ) return NULL;
int lenA=0,lenB=0;
int gap;
struct ListNode* s;
struct ListNode* l;
s=headA;
while(s)
{
s=s->next;
lenA++;
}
s=headB;
while(s)
{
s=s->next;
lenB++;
}
if(lenA>lenB)
{
gap=lenA-lenB;
l=headA;
s=headB;
}
else
{
gap=lenB-lenA;
l=headB;
s=headA;
}
while(gap--) l=l->next;
while(l)
{
if(l==s) return s;
l=l->next;
s=s->next;
}
return NULL;
}