C++ 链表总结

本文详细介绍了C++中单链表的常见操作,包括链表反转、有序与无序链表去重、链表合并、顺序插入以及链表排序。通过示例程序和算法思路,帮助读者理解并掌握这些链表操作的方法。
摘要由CSDN通过智能技术生成

一、单链表问题

定义ListNode节点结构体

struct ListNode {
   
     int val;
     ListNode *next;		//定义节点的后继
     ListNode(int x) : val(x),next(NULL){
   }//声明一个节点
};

1、链表反转

 1->2->3->4->5->null
 ^
 root

  逆序的思路:首先声明一个空指针node指向一个空节点,然后将原链表中的节点1指向node,接着声明一个临时根节点root用来保存链表的表头,循环操作,直到root为空指针
示例程序如下:

ListNode *reverse(ListNode *root)
{
   
    ListNode *node = nullptr;
    while(root){
   
        ListNode *next = root->next;	//保存表头的位置
        //由于逆序,因此此时原表头的下一个节点为空节点 ,下一个node为原表头
        root->next = node;				
        node = root;					//保存此时的根节点,准备下一次连接
        root = next;					//重置新的表头
    }
    return node; 
}

程序执行流程如下:

//step1: 保存表头的位置
ListNode *next = root->next;
2->3->4->5->null
^
next
//step2:连接新的链表
root->next = node;
1->null
^
root 
//step3:更新待连接的节点位置
node = root;
1->null
^
node 
//step4:更新表头位置
root = next;
2->3->4->5->null
^
root
//循环操作,直到root为null

2、链表去重

  去除链表中重复的数字,分两种情况:1,链表是有序链表;2,链表是无序链表

2.1有序链表去重

  有序链表:即链表中的元素按照一定顺序排列,链表中的相同元素是相邻的,比如升序,降序。
eg:

 1->2->2->3->4->
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值