1、反转链表。
ListNode* reverseList(ListNode* head) {
//设置3个指针,pre用于修改指针方向,temp用于保存原链表下一个节点的位置
ListNode* cur=head;
ListNode* pre=NULL;
ListNode* temp;
while(cur)
{
temp = cur->next;
cur->next = pre;
//后移
pre = cur;
cur = temp;
}
return pre;
}
2、计算单链表长度
int getListlength(NODE* head)
{
NODE* slow = head;
NODE* fast = head;
while (fast!=NULL&&fast->next!=NULL) //fast指针每次跳2格
{
slow = slow->next;
fast = fast->next;
if (slow == fast)
return;
}
if (fast != NULL || fast->next != NULL) //没有环的情况
{
int len = 0;
NODE* p = head;
while (p!=NULL)
{
len++
p = p->next;
}
return len;
}
else
{
int len1 = 0;//链表开始到环入口的长度
int len2 = 0;//环的长度
NODE* p1 = slow;
NODE* p2 = head;
while (p1!=p2) //
{
p1 = p1->next;
p2 = p2->next;
len1++;
}
while (slow)
{
slow = slow->next;
len2++;
}
return len1 + len2;
}
}