链表总结

链表与栈、队列一样,是一种基本的数据结构,有着不支持随机访问的特点。
以单向链表(也是较为常见的)为例,都应包含一个元素和一个存储下一个节点的指针。

struct ListNode
{
    int data;
    ListNode* next;
}

下面给出关于链表的一些基本操作。
1.通过数组来创建一个链表:
constract1 方法是将元素依次插入链表的后面。
constract2 方法是将元素依次插入链表的前面。

ListNode* constract1(int* nums,int n)
{
    ListNode* head = NULL;
    ListNode* runner = NULL;
    for(int j=0;j<n;j++)
    {
        ListNode* node = new ListNode();
        node->data = nums[j];
        if(j==0)
        {
            head = runner = node ;
            continue;
        }
        runner->next = node;
        runner = node ;
    }
    return head;
}

ListNode* constract2(int* nums,int n)
{
    ListNode* head = NULL;
    for(int j=n-1;j>=0;j--)
    {
        ListNode* node = new ListNode();
        node->data = nums[j];
        if(j==n-1)
        {
            head = node ;
            continue;
        }
        node->next = head;
        head = node;
    }
    return head;
}
int main()
{
    int nums[8] = {1,2,3,4,5,6,7,8};
    ListNode* head = 自己写吧。
}

2 链表的插入,参照上面的代码,插入给定节点的前面和后面。

void pushInBefore(ListNode* &head,  int num)
{
    ListNode* node = new ListNode();
    node->data = num;
    node->next = head;
    head = node;
}//这里用引用确保修改了传进来的head。
void pushInAfter(ListNode* head, int num)
{
    ListNode* node = new ListNode();
    node->data = num;
    node->next = head->next;
    head->next = node;
}

3.链表的删除操作。删除操作需要知道要删除节点的前面节点。
这里给出删除给定节点之后一个节点的操作(假定这个节点后面一定有节点)

void delete(ListNode* node)
{
    ListNode* temp = node->next->next;
    node->next = NULL;
    node->next = temp;
}

4.反转一个链表,即将其中元素逆序排列。

ListNode* reverse1(ListNode* node)
{
    ListNode* p=nullptr;
    ListNode* q = nullptr;
    while(node)
    {
        p = node;
        node = node->next;
        p->next = q;
        q = p;
    }
    return p;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值