上期内容阿博给友友们介绍了指针解链表的巧妙方法,这期阿博再给友友们巩固一下,让友友们真正的掌握指针在链表中的运用🤓🤓🤓
一.题目描述
二.逻辑分析
三.错误分析
四.代码纠正
一.题目描述
二.逻辑分析
三.错误分析
错误案例
struct ListNode* middleNode(struct ListNode* head){
struct ListNode*slow=head;
struct ListNode*fast=head;
if(fast)
{
while(fast->next)
{
fast=fast->next->next;
slow=slow->next;
}
}
return slow;
}
四.代码纠正
struct ListNode* middleNode(struct ListNode* head){
struct ListNode*slow=head;
struct ListNode*fast=head;
while(fast&&fast->next)
{
fast=fast->next->next;
slow=slow->next;
}
return slow;
一.题目描述
二.逻辑分析
三.错误分析
方案一:
错误案例一:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(k--)
{
fast=fast->next;
}
while(fast)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
错误案例二:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(k--)
{
fast=fast->next;
if(fast==NULL)
return NULL;
}
while(fast)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
错误案例三:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(k--&&fast)
{
fast=fast->next;
if(fast==NULL)
return NULL;
}
while(fast)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
错误案例四:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(k--&&fast)
{
if(fast==NULL)
return NULL;
fast=fast->next;
}
while(fast)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
四.代码纠正
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(k--)
{
if(fast==NULL)
return NULL;
fast=fast->next;
}
while(fast)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
方案二:
错误案例:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(--k)
{
if(fast==NULL)
return NULL;
fast=fast->next;
}
while(fast&&fast->next)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
四.代码纠正
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
struct ListNode* fast=pListHead;
struct ListNode*slow=pListHead;
while(--k&&fast)
{
fast=fast->next;
if(fast==NULL)
return NULL;
}
while(fast&&fast->next)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
一.题目描述
二.逻辑分析
三.错误分析
错误案例:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode*head=NULL, *tail=NULL;
while(list1&&list2)
{
if(list1->val<list2->val)
{
if(tail==NULL)
{
head=tail=list1;
}
else
{
tail->next=list1;
tail=tail->next;
}
list1=list1->next;
}
else{
if(tail==NULL)
{
head=tail=list2;
}
else
{
tail->next=list2;
tail=tail->next;
}
list2=list2->next;
}
}
if(list1)
tail->next=list1;
if(list2)
tail->next=list2;
return head;
}
四.代码纠正
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode*head=NULL, *tail=NULL;
if(list1==NULL)
return list2;
if(list2==NULL)
return list1;
while(list1&&list2)
{
if(list1->val<list2->val)
{
if(tail==NULL)
{
head=tail=list1;
}
else
{
tail->next=list1;
tail=tail->next;
}
list1=list1->next;
}
else{
if(tail==NULL)
{
head=tail=list2;
}
else
{
tail->next=list2;
tail=tail->next;
}
list2=list2->next;
}
}
if(list1)
tail->next=list1;
if(list2)
tail->next=list2;
return head;
}
好了,友友们,本期内容到这里就告一段落了,码字不易,如果友友们感觉对自己有帮助的话,可以给阿博点个关注哦,后续会继续给友友们带来更多好的作品。🤗🤗🤗 |