一、后插法
1、定义:
通过将新节点逐个插入到链表的尾部来创建链表。
2、特点:
(1)每次申请一个新节点,读入相应的数据元素值
(2)为了使新节点能够插入到表尾,需要增加一个尾指针 r 指向链表的尾结点
3、图示:
4、代码实现:
cpp
//----------单链表的存储结构----------
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
cpp
void CreateList_R(LinkList &L, int n)
{
L = new LNode;
L->next = NULL;
r = L;
for(i=0; i<n; i++)
{
p = new LNode;
cin>>p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
二、"合并两个有序链表"
1、题目:
2、解题思路:
此题可以先创建一个空链表,然后依次从两个有序链表中选取最小的进行尾插操作进行合并
3、代码实现:
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
if(list1 == NULL)
return list2;
if( list2 == NULL)
return list1;
struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode));
p->next = NULL;
struct ListNode* q = (struct ListNode*)malloc(sizeof(struct ListNode));
q->next = NULL;
q = p;
while(list1 && list2)
{
struct ListNode* l1 = list1;
struct ListNode* l2 = list2;
if(l1->val >= l2->val)
{
list2 = list2->next;
p->next = l2;
p = p->next;
}
else
{
list1 = list1->next;
p->next =l1;
p = p->next;
}
}
if(list1)
p->next = list1;
if(list2)
p->next = list2;
return q->next;
}
4、测试用例:
微语:You want this life, these choise are necessary.
(最近在看《穿普拉达的女王》,里面的女性太帅了!!)