1. 代码段1简介:合并两个有序链表
1.1. 代码1
struct ListNode \\1
{ \\2
int m_nValue; \\3
ListNode *m_pNext; \\4
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) \\5
{ \\6
if(pHead1 == NULL) \\7
return pHead2; \\8
else if(pHead2 == NULL) \\9
return pHead1; \\10
\\11
ListNode* pMergedHead = NULL; \\12
\\13
if(pHead1->m_nValue < pHead2->m_nValue) \\14
{ \\15
pMergedHead = pHead1; \\16
pMergedHead->m_pNext = Merge(pHead1->m_pNext, pHead2); \\17
} \\18
else \\19
{ \\20
pMergedHead = pHead2; \\21
pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext); \\22
} \\23
\\24
return pMergedHead; \\25
}; \\26
2. 不懂的地方
14行到23行,为什么这个功能的实现需要写一个递归函数?
遍历整个链表,将数据一个个插入到总链表里的方法是否可行,两种方法孰优孰劣呢?
第7行到第10行设置的两个判断条件,能够有效防止因空链表导致程序的奔溃,这很值得我们学习!
2. 代码段1简介:查找倒数第k个结点
2.1 代码1
int findNode(LinkList l,int k) \\1
{ \\2
Node *s1,*s2; \\3
s1=s2=l; \\4
int counter=0; \\5
while(s1->next) \\6
{ \\7
if(counter<k-1) \\8
{ \\9
s1=s1->next; \\10
counter++; \\11
} \\12
else \\13
{ \\14
s1=s1->next; \\15
s2=s2->next; \\16
} \\17
} \\18
return s2->data; \\19
} \\20
typedef struct Node \\21
{ \\22
int data; \\23
Node *next; \\24
}*LinkList; \\25
2.2 自己不懂的地方
20-24行是结构体定义哦
我不明白13-17行的代码是如何实现找到倒数第k个结点的值的功能的?
第六行,while循环里的条件是判断s1的下一个结点是否为空,为空则不执行循环。
第8-12行的代码,是判断程序是否遍历到了倒数第k个结点,s1=s1->next这句代码的
功能是移到下一个结点去。