链表习题(8)-寻找单链表中数据域大小为k的结点,并与前一结点交换,如果前一结点存在的情况下

 1 /*寻找单链表中数据域大小为k的结点,并与前一结点交换,如果前一结点存在的情况下*/
 2 /*
 3     算法思想:定义两个指针,pre指向前驱结点,p指向当前结点,当p->data == k的时候,交换
 4     pre->data和p->data
 5 */
 6 void SwapData(LinkList& L, int k)
 7 {
 8     LNode *pre = L, *p = L->next;
 9     int temp;
10     while (p)
11     {
12         if (p->data == k)
13         {
14             temp = p->data;
15             p->data = pre->data;
16             pre->data = temp;
17         }
18         pre = p;
19         p = p->next;
20     }
21 }

原文地址:https://www.cnblogs.com/KBryant/p/11650055.html

时间: 2024-10-17 10:33:27

链表习题(8)-寻找单链表中数据域大小为k的结点,并与前一结点交换,如果前一结点存在的情况下的相关文章

CareerCup之2.2 寻找单链表倒数第n个元素

[题目] 原文: 2.2 Implement an algorithm to find the nth to last element of a singly linked list. 译文: 实现一个算法从一个单链表中返回倒数第n个元素. [分析] (1)创建两个指针p1和p2,指向单链表的开始节点. (2)使p2移动n-1个位置,使之指向从头开始的第n个节点.(意思是就是使p1和p2距离n个位置) (3)接下来检查p2 - > = = null 如果yes返回p1的值,否则继续移动p1和 p

Python与数据结构[0] -> 链表[0] -> 单链表与带表头单链表的 Python 实现

单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利用Python来完成单链表的实现. 1 单链表 不带表头的单链表通常形式如下, node_1 -> node_2 -> node_3 -> node_4 完整代码 1 class Node: 2 def __init__(self, val=None, nxt=None): 3 self.v

数据结构-寻找单链表的中间元素

1:这里使用一个只用一遍扫描的方法.描述如下: 假设mid指向当前已经扫描的子链表的中间元素,cur指向当前已扫描链表的末节点,那么继续扫描即移动cur到cur->next,这时只需判断一下应不应该移动mid到mid->next就行了.所以一遍扫描就能找到中间位置.代码如下: // ConsoleApplication15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <malloc.h> #inclu

链表(主要是单链表)

单链表:只指出后继关系的链表 双链表:同时存储前趋和后继 循环链表:指出后继的同时指出头结点和尾结点的关系 单链表的存储 定义一个结点类型 struct  linkRec { datatype  data; linkRec  *next; } 单链表操作-插入 在结点p后插入一个结点 *申请空间 *输入数据放入申请到的空间 *链入p后 tmp = new linkRec;  // 创建一个新结点 tmp->data = x;        // 把x放入新结点的数据成员中 tmp->next

单链表 --- 合并两个单链表

合并单链表 --> 一.解决方法: 确保两个单链表不为空,且二者皆有序(若无序,则先进行排序) 创建新的单链表,并比较原本两个单链表数据大小,较小者置于新单链表中 逐步将两个单链表的数据置于新单链表中,直至二者为空 二.程序代码: ListNode* MergeList(ListNode *L1,ListNode *L2)//合并两个单链表 { ListNode *newHead=NULL; ListNode *tail=NULL; if(L1==NULL) { return L2; } if(

链表 | 去除递增有序单链表中的重复元素

王道P37T12 主代码: void delete_common(LinkList& L){ LNode* pre=L,*p=L->next; while(p!=NULL){ LNode* r=p->next; while(r!=NULL && p->data==r->data){ pre->next=r; LNode* del=p; p=r; delete del; r=r->next; } pre=p; p=p->next; } } 完

链表学习一:单链表创建-头插入与尾插入

链表的创建过程是一个动态的生成过程,创建链表有两种思路,一种是从表头插入,另一种是从表尾插入. 表头插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止. 表尾插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志为止. 两种方法C++实现如下: 1 #include<iostream> 2 using namespace

【算法设计-单链表的逆转】单链表逆转实现

1.在Θ(n)时间内将链表转置,而且只能需要少量的额外空间 这里需要用3个指针使得q指向p然后依次后移. 代码: #include<iostream> using namespace std; typedef struct Node { int data; struct Node *next; }LinkList; LinkList* Create_End(); void printLinkList(LinkList *L); LinkList* Create_End() { LinkList

leetcode链表--5、linked-list-cycle(单链表是否有环)

题目描述 Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using extra space? 解题思路:使用快慢指针,若在遍历过程中slow==fast则有环,否则无环 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *nex