C/C++链表操作(面试)

1.为了反转这个单链表,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Header-结点2-结点1-结点3-结点4-NULL,然后进行相同的交换将结点3移动到结点2的前面,然后再将结点4移动到结点3的前面就完成了反转,思路有了,就该写代码了:

 1 LinkedList ReverseSinglyLinkedList(LinkedList list)
 2 {
 3     LNode   *tmp = NULL;
 4     LNode   *p = NULL;
 5
 6     if (list == NULL)
 7     {
 8         return NULL;
 9     }
10     tmp = list->next;
11     while (tmp->next != NULL)
12     {
13         p = tmp->next;
14         tmp->next = p->next;
15         p->next = list->next;
16         list->next = p;
17     }
18     return list;
19 }
2.有序单链表的合并就是两个之前都已排好序的链表,将它们合并成一个链表。合并的过程中对于两个链表值相等的结点也要链到最终的链表中去。
 1 struct Node{
 2     int data;
 3     Node *next;
 4 };
 5
 6 typedef struct Node Node;
 7
 8 Node *Merge(Node *head1,Node *head2)
 9 {
10     Node *p1 = NULL;
11     Node *p2 = NULL;
12     Node *head = NULL;
13
14     //找出两个链表中第一个结点较小的结点,head记录较小结点的头结点
15     if(head1->next->data < head2->next->data)
16     {
17         head = head1;
18         p1 = head1->next;
19         p2 = head2->next;
20     }
21     else
22     {
23         head = head2;
24         p2 = head2->next;
25         p1 = head1->next;
26     }
27
28     Node *pcur = head;
29
30     //在两个链表中遍历比较,将值较小的结点链接到pcur结点后
31     while(p1 != NULL && p2 != NULL)
32     {
33         if(p1->data <= p2->data)
34         {
35             pcur->next = p1;
36             pcur = p1;
37             p1 = p1->next;
38         }
39         else
40         {
41             pcur->next = p2;
42             pcur = p2;
43             p2 = p2->next;
44         }
45     }
46     //将p1或p2剩余的结点链到pcur之后,完成整个合并的过程
47     if(p1 != NULL)
48         pcur->next = p1;
49     if(p2 != NULL)
50         pcur->next = p2;
51
52     return head;
53 }

C/C++链表操作(面试)

时间: 2024-10-08 17:43:04

C/C++链表操作(面试)的相关文章

Python面试常考点之深入浅出链表操作

Python面试常考点之深入浅出链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特点,以及链表的一些常见操作给大家做一个深入浅出的讲解,希望本文的读者能够掌握链表的操作. 1. 什么是链表? 简单地说,链表是一种无序的列表.你可以把链表里面的数据看成是随机排列的,元素之间并没有固定的先后顺序.所以,既然是无序的,那么我们就无法像操作list对象一样简单地用in

【数据结构与算法】java链表操作

链表操作代码量少但是比较容易出错,是比较适合面试的地方. 代码实现 /** * 源码名称:MyLinkList.java * 日期:2014-09-05 * 程序功能:java链表操作 * 版权:[email protected] * 作者:A2BGeek */ import java.util.Stack; public class MyLinkList { class LinkNode<T> { private T mValue; private LinkNode<T> mNe

Python链表操作(实现)

Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特点,以及链表的一些常见操作给大家做一个深入浅出的讲解,希望本文的读者能够掌握链表的操作. 1. 什么是链表? 简单地说,链表是一种无序的列表.你可以把链表里面的数据看成是随机排列的,元素之间并没有固定的先后顺序.所以,既然是无序的,那么我们就无法像操作list对象一样简单地用index来去定位和操作

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

单链表操作

#include<stdio.h>#include<malloc.h> typedef struct Node{ int data; struct Node *next;}LinkList; //就地反转int LinkListRerverse(LinkList *head){ LinkList *q,*p; p = head->next; head->next = NULL; while(p != NULL){ q = p->next; p->next =

数据结构之链表操作

#include <IOSTREAM> #include <IOMANIP> #include <STRING> using namespace std; typedef struct Student { int id; char name[20]; char sex[20]; struct Student *next; }node; typedef node * pnode; pnode Create(); void Print(pnode h); void Sort

单向链表操作 原文:http://canlynet.blog.163.com/blog/static/255013652009113001041903/

/********************************************** 功能:单向链表操作(注意Head指针 需要被改变时传入的是二级指针) 日期:2009.12.29 作者:DC ***********************************************/ #include <stdio.h> #include <stdlib.h> #define OVER_FLOW -2 #define OK 0 typedef int ElemTy

单链表操作系列

#include<stdio.h> #include<stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //单链表的建立1,头插法建立单链表,逆序生成 LinkList LinkListCreateH() { LinkList L,p; L = (LinkList)malloc(sizeof(LNode)

链表操作 -- 有环链表问题

参考: http://blog.163.com/[email protected]/blog/static/1113522592011828104617420/ 问题: 判断一个链表中是否有环. 分析: 我们都知道,当一个链表中没有环时,我们使用一个指针能从头遍历到尾:当链表中有环时,链表会在环中旋转. 当我们只使用一个链表指针时,可想到方法就是使用额外的数据结构来存储遍历过的每个节点,在遍历next节点时,判断next节点是否已存在于存储的节点中. 存储结构可以选择为hashTable,这样的