单链表反序

typedef struct node *linklist;

//revese linklist

linklist reverselinklist1(linklist l) {

linklist current, p;

if(l == NULL) {

return NULL;

}

current = l -> next;

while(current -> next != NULL) {

p = current -> next;

current -> next = p -> next;

p -> next = l -> next;

l -> next = p;

}

return l;

}

linklist reverselinklist2(linklist l) {

linklist current, p;

if(l == NULL) {

return NULL;

}

current = l -> next;

while(current -> next != NULL) {

p = current -> next;

l -> next = p;

current -> next = p -> next;

p -> next = current;

}

}

linklist reverselinklist3(linklist l) {

linklist newlist, temp;

newlist = (linklist)malloc(sizeof(struct node));

if(l == NULL || newlist == NULL) {

return NULL;

}

newlist -> data = l -> data;

newlist -> next = NULL;

while(l -> next != NULL) {

temp = newlist -> next;

newlist -> next = l -> next;

l -> next = l -> next -> next;

newlist -> next -> next = temp;

}

free(l);

return newlist;

}

时间: 2024-11-05 06:20:14

单链表反序的相关文章

Java 实现单链表反序

//单链表反序 public class SingleLinkedListReverse { public static void main(String[] args) { Node head = new Node(0); Node temp = null; Node cur = null; for (int i = 1; i <= 10; i++) { temp = new Node(i); if (i == 1) { head.setNext(temp); } else { cur.set

华为机试题-- 单链表逆序

[问题] 单链表逆序 [代码] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { int value; struct ListNode *next; }ListNode; typedef struct ListNode *List; List reverseList(List head) //列表逆序 { ListNode *rear, *curr,

单链表逆序或者逆序输出

分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序. ********************逆序输出*********************** 1 #include<iostream> 2 #include<stack> 3 #include<assert.h> 4 using namespace std; 5 6 7 typedef struct node{ 8 int data; 9 node * next; 10 }node; 11 12 //

链表 - 单链表逆序

单链表逆序是经典的链表操作算法,单链表逆序的算法思想是将链表箭头反指(假设next指针是一个箭头),即所谓的改链,改链过程如下. 逆序前: head-->......prev-->cur-->next-->......->NULL 逆序后: NULL<--......prev<--cur<--next<--......head 算法逻辑: 1.空链表或只有一个元素,返回原链表head. 2.定义3个指针prev.cur.next,初始化时,prev指向

单链表逆序打印!

单链表打印的时候 一般 if (p== NULL) return; printf("%d ",p->data ); reverse_show(p->next); 结果: 123456 就可以依次打印了 但是如果把打印语句放在后面 就会逆序打印 if (p== NULL)return; reverse_show(p->next); printf("%d ",p->data ); 结果 654321 这是因为退出的时候 是从后面进行的!

单链表逆序操作

//逆序操作//算法1:从第二个节点开始,记录它的下一个节点,然后依次挪到第一个节点之前成为新表头int inverse_node(struct node pH){struct node p = pH; //头结点struct node pPrev = NULL; //记录前一个节点struct node pBack = NULL; //记录下一个节点地址struct node *pFirstNode = p->pNext; //记录第一个节点 //节点只有1个或者无有效节点时,返回原来的链表,

算法习题---线性表之单链表逆序打印

一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排列,然后正序打印即可 三:算法实现(这里使用方法一:递归实现简单易懂) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #def

单链表逆序的几种方法

假设单链表数据结构定义如下: struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 单链表有一个头指针指向第一个结点,最后一个结点指向NULL 一.最容易想到的方法,新建一个单链表newNode,每次将原先链表的第一个结点放到newNode后 ListNode* reverseList(ListNode* head) { ListNode *newNode = new ListN

单链表逆序的三种方法

一.不使用额外存储空间的逆序 LinkList ReverseLink(LinkList L) { LinkList *next; LinkList *prev = NULL; LinkList *head = L->next; while(head != NULL) { next = head->next; head->next = prev; prev = head; head = next; } L->next = prev return L; } 二.头插法逆序 LinkL