输入一个链表,反转链表后,输出链表的所有元素。就地逆转,头插法

本文介绍了一种链表的就地反转方法,通过头插法实现链表元素的反转,并提供了完整的Java实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入一个链表,反转链表后,输出链表的所有元素。就地逆转,头插法

思路:就地逆转,头插法


package com.mytest.mymain;

/*class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class ReverseListNode {
	public static void main(String[] args) {
		ListNode A=new ListNode(1);
		ListNode B=new ListNode(2);
		ListNode C=new ListNode(3);
		ListNode D=new ListNode(4);
		ListNode E=new ListNode(5);
		A.next=B;
		B.next=C;
		C.next=D;
		D.next=E;
		
		ReverseListNode testListNode=new ReverseListNode();
		ListNode ls=testListNode.ReverseList(A);
		System.out.println(ls.next.val);
	}
    public ListNode ReverseList(ListNode head) {
    	if(head==null){
    		return null;
    	}
    	if(head.next==null){
    		return head;
    		}
    	ListNode newhead=head;
    	ListNode p=head.next,q=head.next;
    	
    	newhead.next=null;
    	
    	while(p.next!=null){
    		q=p.next;
    		p.next=newhead;
    		newhead=p;
    		p=q;
    	}
    	p.next=newhead;
    	newhead=p;
    	
    	return newhead;
    }
}





#include <iostream> using namespace std; struct Node { int data; struct Node *next; }; //链表结点结构 void createlist_r(struct Node *&head)//尾插法建单链表,没有头结点,输入顺序就是结点顺序 { int n,i; struct Node *p,*tail; head=new Node; cin>>n; cin>>head->data; head->next=nullptr; tail=head; for(i=0; i<n-1; i++) { p=new Node; cin>>p->data; p->next=nullptr; tail->next=p; tail=p; } } void display(struct Node *head)//输出不带头结点的单链表 { struct Node *p; p=head; while(p!=nullptr) { cout<<p->data<<" "; p=p->next; } cout<<endl; } void deletelist(struct Node *&head) //删除单链表 { struct Node *p; while(head) { p=head; head=head->next; delete(p); } head=nullptr; //一定要赋值为空,否则容易造成野指针访问 } //请在以下空白处编写reverselit函数,完成原地逆转,即过程中不在分配新的结点也不撤销旧的结点 /********** Write your code here! **********/ /*******************************************/ int main() { int t; cin>>t; while(t--) { struct Node *head; createlist_r(head); display(head); reverselist(head); display(head); deletelist(head); } return 0; }给出以上代码框架,按数字输入顺序创建单链表。不可借助数组、容器,不可开辟新结点空间。编写函数,在原链表上实现单链表反转。例如单链表10->20->30,反转后变为单链表30->20->10。 注:不符合题目要求,使用上述逆序输出不计分。 输入 测试次数t 每组测试数据一行,格式如下: 数据个数n,后跟n个整数 输出 对每组测试数据,输出反转前后的单链表输入样例1 2\n 10 1 2 3 4 5 6 7 8 9 10\n 4 19 20 15 -10 输出样例1 1 2 3 4 5 6 7 8 9 10 \n 10 9 8 7 6 5 4 3 2 1 \n 19 20 15 -10 \n -10 15 20 19
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值