单向链表逆序

之前类似的情况碰到过好多次,自己也解决过,不知怎么到了笔试的时候反而会写错。

这样给我一个编译器,一切靠它来搞定的想法还是太幼稚啊。

#include <iostream>
using namespace std;

typedef struct ListNode{
    int data;
    struct ListNode* next;
}*List;
void printList(ListNode* head);
List ReList(List head);
int main()
{
    ListNode *head,*p,*q;
    head=new ListNode;
    head->data=0;
    head->next=NULL;
    p=head;
    for (int i=1;i<10;i++)
    {
        q=new ListNode;
        q->data=i;
        q->next=NULL;
        p->next=q;
        p=q;
    }
    printList(head);
    List back=ReList(head);
    printList(back);
    system("pause");
    return 0;
}

List ReList(List head)
{
    List next,prev=NULL;

    while(head)
    {
        next=head->next;
        head->next=prev;
        prev=head;
        head=next;
    }
    return prev;

}

void printList(ListNode* head)
{

    while(head)
    {
        cout<<head->data<<‘ ‘;
        head=head->next;
    }
    cout<<endl;

}
时间: 09-16

单向链表逆序的相关文章

[2013] 链表逆序

题目二:逆序链表输出. 题目描述:   将输入的一个单向链表,逆序后输出链表中的值.链表定义如下: typedef struct tagListNode  {        int value;        struct tagListNode *next;  }ListNode;   要求实现函数:   void converse(ListNode **head); [输入]head:    链表头节点,空间已经开辟好 [输出]head:    逆序后的链表头节点 [返回]无 [注意]只需要

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

[问题] 单链表逆序 [代码] #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,

算法-----单链表逆序

一.全部逆序 定义两个变量pre, next,与节点head一起,遍历整个链表. while(head != null){ next = head.next; head.next = pre; pre = head; head = next; } 二. 部分逆序 首先找到需要逆序的节点区域的前一个节点和后一个节点.记为 pre,pos. 定义3个变量cur, next1, next2. 遍历链表. Node cur = pre.next; Node next1 = cur.next; cur.n

C++ 递归和非递归实现链表逆序

测试环境:vs2010  windows7 逆序分别采用递归调用和链表头插法实现逆序. 具体代码如下: #include<iostream> #include<stdlib.h> using namespace std; class LinkList { private: struct Node { struct Node *next; int value; }; Node *phead; void reverse_use_recursion(Node *pnode) { if(p

单链表逆序打印!

单链表打印的时候 一般 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.辅助指针 void ReverseList(LinkList* ListHead) { if(NULL==ListHead || NULL==ListHead->next) return; LinkList* pPre=ListHead; LinkList* pCur=ListHead->next; LinkList* pNext=NULL; while(NULL!=pCur) { pNext=pCur->next; pCur->next=pPre; pPre=pCur; pC

单链表逆序的几种方法

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

两种方法求单链表逆序

1 递归,非常easy 代码: #include<iostream> using namespace std; typedef struct node{ int data; struct node * pNext; }Node ,*pNode; void createNode(pNode & pHead){ int temp; scanf("%d",&temp); pNode p,q; bool isFirst = true; while(temp){ if

链表逆序

private void ListResverse(ListNode head) { ListNode cur,next; if(head == null||head.next == null) return; cur = head.next; while(cur.next!=null) { next = cur.next; cur.next = next.next; next.next = cur; head.next = next; } }

reverse list链表逆序

1 ListNode* reverseList(ListNode* head){ 2 if (head==NULL || head->next==NULL) return head; 3 ListNode *pre=head, *cur=pre->next, *post; 4 pre->next = NULL; 5 while (cur!=NULL){ 6 post = cur->next; 7 cur->next = pre; 8 pre = cur; 9 cur = po