建立一个单链表,并删除链表中值为W的元素

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<malloc.h>
using namespace std;
typedef struct node
{
    int data;
    struct node *next;//指向类型完全相同的指针
    int len;
} Lnode,*Linklist;
//一个是结构体类型,一个是结构体指针类型
int n,tmp;
Linklist head,p,q;
Lnode *creat_L(int n)
{
    head=(Linklist)malloc(sizeof(Lnode));//建立头节点
    head->next=NULL;//把头节点置为空
    p=head;//结构体指针负责连接链表
    int tmp;
    p->len=n;
    while(n--)
    {
        scanf("%d",&tmp);
        q=(Linklist)malloc(sizeof(Lnode));//q负责分配空间和与p进行连接
        q->data=tmp;//把数据域赋值
        q->next=NULL;//其设置为空
        p->next=q;//再连接这个新的节点
        p=q;//更新p,把p进行移动
    }
    return head;
}
void print_L(Linklist head)
{
    Linklist s=head->next;//头节点为空值
    printf("%d\n",head->len);
    while(s!=NULL)
    {
        if (s->next!=NULL){
          printf("%d ",s->data);
        }else{
          printf("%d\n",s->data);
        }
        s=s->next;//链表的移动
    }
}
void del(Linklist head,int w)
{
    Linklist s=head;//设置为头节点
    Linklist tmp;//需要设置一个新的节点,这样就能比较容易的实现删除
    while(s!=NULL)
    {
        tmp=s->next;
        if (tmp!=NULL && tmp->data==w)//这个值首先不为空,并且和w相等
        {
            s->next=tmp->next;//把s->next的值由tmp变成tmp->next
            head->len--;//长度减一
            free(tmp);
        }
        else
            s=s->next;
    }
    return ;
}
int main()
{
    Linklist head;
    int n,w;
    while(~scanf("%d",&n))
    {
        head=creat_L(n);
        print_L(head);
        scanf("%d",&w);
        del(head,w);
        print_L(head);
    }
    return 0;
}
/*
10
56 25 12 33 66 54 7 12 33 12
12
*/

原文地址:https://www.cnblogs.com/bluefly-hrbust/p/9941121.html

时间: 2024-11-08 21:57:30

建立一个单链表,并删除链表中值为W的元素的相关文章

剑指Offer(链表)-删除链表中重复的节点

(删除链表中重复的节点)题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路:这里的重复的节点不保留是将只要重复了的节点都要删除掉,所以考虑利用哈希set的方法,先进行重复性的判断,将重复的元素加入到哈希set中去,然后将重复的元素删除. 利用到了两个指针pre和cur,来表示前一个节点和当前节点. /* public

给定一个链表,删除链表的倒数第 n 个节点(已知该结点存在),并且返回链表的头结点。

思路: 找到倒数第n个结点的前一个结点,让该结点的后继为倒数第n个结点的后继 子问题:找到倒数第n个结点的前驱 1.有两个引用,第一个引用指向首节点,然后走n步 2.第二个结点指向首节点,此时两结点之间隔了n-1个结点,保持这样的距离,共同向后移动 3.当第一个引用到达尾节点时,第二个引用离尾节点有n-1个结点, 4.此时第二个结点为倒数第n+1个结点,即倒数第n个结点的前驱 特殊情况: 1.链表只有一个结点或者为空链表,直接返回空即可: 2.链表的长度刚好等于n,即删除首节点,第一个引用从头结

链表问题----删除链表的中间节点和a/b处的节点

删除链表的中间节点和a/b处的节点 对于给定一个链表的头节点head,实现删除链表的中间节点的函数. 例如 不删除任何节点: 1->2,删除节点1 1->2->3,删除节点2 1->2->3->4,删除节点2 1->2->3->4->5,删除节点3 如果将本问题复杂一下,给定链表的头节点head.整数a和整数b,实现删除位于a/b处节点的函数. 例如 链表:1->2->3->4->5,假设 a/b 的值为r 如果 r 等于

循环单链表 | 循环删除表中所有最小值并输出

王道P38T19 代码: void del_min(LinkList& L){ LNode*p=L,*mp=L; while(p->next!=p){ if(p->next==L){ //进行了一轮 LNode*del=mp->next; mp->next=del->next; printf("%d ",del->data); p=p->next; //跳过头结点 (这个语句放在删除语句之前) delete del; mp=L; con

建立一个带头结点的单向链表,链表中的各结点按结点数据中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入链表中,使插入后各结点数据域中的数据仍保持递增有序

#include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=x;将形参x赋给结点的数

生成单向链表 并删除链表中某个元素

leetcode 题目描述: Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 Return: 1 --> 2 --> 3 --> 4 --> 5 生成链表 若输入元素不为0,则加入到链表尾部,若为0,不加入,且生成链表工作完成.代

LeetCode -- 删除链表中值为k的元素

本题目比較直接,一次遍历遇到匹配的元素直接删除(通过n.next = n.next.next)就能够了,仅仅是须要考虑到:1.首节点的情况2.末节点的情况 下面为实现: public ListNode RemoveElements(ListNode head, int val) { // null list if(head == null){ return null; } // constains only one node if(head.next == null && head.val

单链表之删除链表重复数据

1 public static void deleteDup(Node head){ 2 Node p = head; 3 while(p!=null){ 4 Node q = p; 5 while(q.next != null){ 6 if(p.data == q.next.data){ 7 q.next = q.next.next; 8 //不能加q = q.next; 9 }else{ 10 q = q.next; 11 } 12 } 13 p = p.next; 14 } 15 }

更好列表页中一个航班.先unset删除数组中一个键值对,再追加,最后按键排序

<?php $arr = array( '0' => array('item' => array( 'aa' => 'aaa', 'bb' => 'bbb' )), '1' => array('item' => array( 'cc' => 'ccc', 'dd' => 'ddd' )), '2' => array('item' => array( 'ee' => 'eee', 'ff' => 'fff' ))); echo '