目录
一、合并两个有序链表
两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]示例 2:
输入:l1 = [], l2 = [] 输出:[]示例 3:
输入:l1 = [], l2 = [0] 输出:[0]
/**
* 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;
//定义l1,l2指针分别指向list1和list2的第一个有数据结点
struct ListNode* l1,*l2;
l1=list1->next;
l2=list2->next;
//新链表
struct ListNode* list3,*l3;
list3=(struct ListNode *)malloc(sizeof(struct ListNode));
//l3指向新链表的头结点
l3=list3;
while(l1&&l2)
{
if(l1->val<=l2->val)
{
l3->next=l1;
l3=l1;
l1=l1->next;
}
else
{
l3->next=l2;
l3=l2;
l2=l2->next;
}
}
if(l1)
{
l3->next=l1;
}
if(l2)
{
l3->next=l2;
}
return list3->next;
}
二、删除排序列表中的重复元素
给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。输入:head = [1,1,2,3,3] 输出:[1,2,3]
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode* l1;//l1指针指向链表的头结点
l1=head;
while(l1->next!=NULL)//当未遍历完的时候
{
if(l1->val==l1->next->val)//遍历到最后一个结点
{
l1->next=l1->next->next;
}
else
{
l1=l1->next;
}
}
return head;
}